【问题标题】:How to add to numpy array entries of different size in a for loop (similar to Matlab's cell arrays)?如何在 for 循环中添加不同大小的 numpy 数组条目(类似于 Matlab 的单元格数组)?
【发布时间】:2015-10-08 12:40:12
【问题描述】:
我正在尝试在 python \ numpy 中实现对 Matlab 单元数组的模拟。
Matlab 代码会这样:
for n=1:10
C{n} = rand(1,n);
end
请注意,每个单元格元素都有不同的长度。现在在 numpy 中:
for n in np.arange(10):
C[n] = np.random.rand(1,n)
我得到一个错误,我该怎么做才能实现它?
【问题讨论】:
标签:
python
arrays
matlab
for-loop
numpy
【解决方案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