我有一个循环,它将元素添加到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和数组很新:-(
答案 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
作为视图。这可以为您节省一份副本。