建立一个numpy矩阵

时间:2017-02-02 01:23:20

标签: python arrays numpy matrix iteration

我正在尝试在numpy中构建一个矩阵。矩阵尺寸应为(5001x7)。这是我的代码:

S=np.array([.0788,.0455,.0222,.0042,.0035,.0029,.0007])
#This is vector S, comprised of 7 scalars.

lamb=list(range(0,5001))
#This is a list of possible values for lambda, a parameter in my data.

M = np.empty([5001,7], order='C')
#This is the empty matrix which is to be filled in the iterations below.

for i in S:
    for j in lamb:
         np.append(M,((S[i]**2)/(lamb[j]+S[i]**2)))

我遇到的问题是M仍然是零向量矩阵。

重要细节: 1)我已将最后一行指定为:

    M=np.append(M,((S[i]**2)/(lamb[j]+S[i]**2)))

然后我在1d数组中得到一个长度为70,014的值数组。我不确定该怎么做。

2)我已经尝试在矩阵M的'float'和'int'之间切换dtype参数。

3)运行代码时收到此警告: VisibleDeprecationWarning:使用非整数而不是整数将导致将来出错   app.launch_new_instance()

4)我正在使用Python 3.4

我非常感谢你的帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

np.append制作数组的副本并将值附加到副本的末尾(每次都使数组更大),而我认为你想要修改M

 for i in range(len(S)):
     for j in range(len(lamb)):
          M[j][i] = ((S[i]**2)/(lamb[j]+S[i]**2))

答案 1 :(得分:1)

1)append添加到数组的末尾,这就是为什么你的最终数组有5001x7x2=70014个元素。只有前半部分为零。它将数组展平为1D,因为您没有指定要追加的axis

2)完成整个过程的更多“numpy”方式是广播

S=np.array([.0788,.0455,.0222,.0042,.0035,.0029,.0007])
lamb=np.arange(0,5001)
M=(S[:,None]**2)/(lamb[None,:]+S[:,None]**2)