如何在for循环中添加不同大小的numpy数组条目(类似于Matlab的元胞数组)?

bla*_*bla 4 python arrays matlab for-loop numpy

我正在尝试在 python \ numpy 中实现对 Matlab 元胞数组的模拟。Matlab 代码如下:

for n=1:10
    C{n} = rand(1,n);
end
Run Code Online (Sandbox Code Playgroud)

请注意,每个单元格元素都有不同的长度。现在在 numpy 中:

for n in np.arange(10):
    C[n] = np.random.rand(1,n)
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,我该怎么做才能实现这个?

Bas*_*els 5

在大多数简单的情况下,您可以只使用标准的 Python 列表。它们与 Matlab 元胞数组非常相似,您可以使用它们来存储任何内容:

C = []
for n in np.arange(10):
    C.append(np.random.rand(1,n))
Run Code Online (Sandbox Code Playgroud)

如果列表不太长并且只有一个维度(因此只有一个向量),这将是一个不错的选择。请注意,在 Python 中,您通常不会预先分配最终大小的列表,而只是附加到一个空列表。Python 列表针对追加到末尾进行了优化,它们已经在幕后进行了某种预分配。

如果您要翻译具有多个维度或非常大的元胞数组的 Matlab 代码,您可以使用 numpy 数组dtype=object

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)
Run Code Online (Sandbox Code Playgroud)