将numpy向量添加到numpy多维数组中

时间:2011-12-29 11:28:15

标签: arrays numpy slice

我有一个循环,它将元素添加到1d数组中:

    for i in range(0, 1000):
        fvector[0, i] = function_value

循环结束后,我有一个1 x 1000向量,我想存储在一个多维数组fmatrix中,它是50 x 1000.我设法使用循环并单独复制每个元素 - 但它非常慢然后我尝试使用切片在循环后一次性复制整个矢量,然后准备在下一列复制下一个矢量。如何进入下一栏?我试过了:

    s=slice([i], None)
    fmatrix[s] = fvector

以及s的各种组合,但是我收到有关使用序列或无效语法设置数组元素的错误消息。

我知道这应该是直截了当但我对python,numpy和数组很新:-(

2 个答案:

答案 0 :(得分:1)

fvector有形状(1,1000)。这是一个2D数组,即使一个轴的长度为1。 您可以使用fvector[0,:]将其分割为一维数组。这给出了第一行。

fmatrix有形状(50,1000)。您可以使用fmatrix[i,:]将其分割为一维数组。这给出了i行。

所以要将fvector的第一行中的值分配到i的{​​{1}}行:

fmatrix

但也许fmatrix[i,:] = fvector[0,:] 不需要成为2D数组?也许只是让它成为一维数组开始:

fvector

然后你可以用

进行作业
fvector = np.empty(1000)
for i in range(0, 1000):
    fvector[i] = function_value

答案 1 :(得分:1)

试试这个。分配矩阵,这里零初始化效果:

>>> import numpy as np
>>> fmatrix = np.zeros((50, 1000))

然后将其编入索引以获取fvector

>>> fvector = fmatrix[0]

然后分配给fvector的元素:

>>> for i in xrange(1000):
...     fvector[i] = i

如果您现在检查fmatrix[0]的第一行fmatrix,您会发现它已在前一个循环中分配。那是因为NumPy行索引在fvector的第一行创建了fmatrix作为视图。这可以为您节省一份副本。