如何在 for 循环中添加不同大小的 numpy 数组条目(类似于 Matlab 的单元格数组)?
Posted
技术标签:
【中文标题】如何在 for 循环中添加不同大小的 numpy 数组条目(类似于 Matlab 的单元格数组)?【英文标题】:How to add to numpy array entries of different size in a for loop (similar to Matlab's cell arrays)? 【发布时间】:2015-10-08 12:40:12 【问题描述】:我正在尝试在 python \ numpy 中实现对 Matlab 单元数组的模拟。 Matlab 代码会这样:
for n=1:10
Cn = rand(1,n);
end
请注意,每个单元格元素都有不同的长度。现在在 numpy 中:
for n in np.arange(10):
C[n] = np.random.rand(1,n)
我得到一个错误,我该怎么做才能实现它?
【问题讨论】:
见***.com/questions/1761419/… 【参考方案1】:在大多数简单的情况下,您可以只使用标准的 Python 列表。它们与 Matlab 单元数组非常相似,您可以使用它们来存储任何内容:
C = []
for n in np.arange(10):
C.append(np.random.rand(1,n))
如果列表不太长并且只有一个维度(所以只是一个向量),这将是一个不错的选择。请注意,在 Python 中,您通常不会预先分配最终大小的列表,而只是附加到一个空列表。 Python 列表针对追加到末尾进行了优化,它们已经在后台进行了某种预分配。
如果您正在翻译具有多维或非常大的单元数组的 Matlab 代码,您可以使用带有 dtype=object
的 numpy 数组:
m, n = 3, 6
C = np.empty((m, n), dtype=object)
for i in xrange(m):
for j in xrange(n):
C[i, j] = np.random.rand(i, j)
【讨论】:
【参考方案2】:您正在使用列表。因此,在该循环内使用[n]
对其进行索引之前,您需要初始化该列表。初始化列表的方法之一是这样的 -
C = [None]*10 # Here 10 is the length of the list
【讨论】:
以上是关于如何在 for 循环中添加不同大小的 numpy 数组条目(类似于 Matlab 的单元格数组)?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Python 多处理 Pool.map 在 for 循环中填充 numpy 数组
如何使用for循环创建一定长度的numpy数组(或pandas数据框)?