【发布时间】:2015-05-08 11:15:20
【问题描述】:
我想创建 2D numpy.array 一开始只知道它的形状,即 shape=2。现在,我想在for循环中创建ith一维numpy.arrays,并将它们添加到shape=2的主矩阵中,所以我会得到这样的东西:
matrix=
[numpy.array 1]
[numpy.array 2]
...
[numpy.array n]
我怎样才能做到这一点?我尝试使用:
matrix = np.empty(shape=2)
for i in np.arange(100):
array = np.zeros(random_value)
matrix = np.append(matrix, array)
但是由于print(np.shape(matrix)),在循环之后,我得到类似:
(some_number, )
如何将每个新的array 附加到matrix 的下一行?提前谢谢你。
【问题讨论】:
-
这是一种非常低效的创建数组的方法。每次附加到数组时,它都会生成一个新副本。如果您在循环中进行追加,则随着数组大小的增长,此过程会变得越来越慢。预先分配输出数组然后按原样填充行要好得多。如果您不知道输出的确切大小,那么您最初可以分配一个比您认为需要的更大的数组,并在完成后仅索引您需要的行。另一种选择是创建一个数组列表,然后在列表中调用
np.array()或np.vstack()。 -
此外,您似乎正在尝试创建一个参差不齐的数组(即每行长度不同的数组),而 numpy 实际上仅设计用于处理矩形数组。例如,考虑索引如何为不规则数组工作 - 没有直接的方法可以在不规则维度上进行切片索引,例如
a[:, :10]。根据您要使用输出的目的,使用数组列表或创建一个用 NaN 填充缺失值的矩形数组可能更有意义。