我一直试图将一个数组中的值分配给另一个数组,特别是将一个带有值的数组分配给一个零数组。这些值在zeros数组中的位置也非常重要。这是我的问题:
import numpy as np
x = np.zeros((2,3))
P= np.asarray ([1,2,3,4,5,6])
for i in range(0,2):
for j in range(0,3):
x[i,j] = P[(i-1)*3+j] # 3 is the counter in x direction, nx
x
使用此代码,输出是(这是我想要的):
array([[4., 5., 6.],
[1., 2., 3.]])
但是,如果我尝试扩展数组,例如:
import numpy as np
x = np.zeros((3,3))
P= np.asarray ([1,2,3,4,5,6,7,8,9])
for i in range(0,3):
for j in range(0,3):
x[i,j] = P[(i-1)*3+j] # 3 is the counter in x direction, nx
x
输出为:
array([[7., 8., 9.],
[1., 2., 3.],
[4., 5., 6.]])
我希望输出为:
array([[7., 8., 9.],
[4., 5., 6.],
[1., 2., 3.]])
输出数组的扩展有输出变化的原因吗?
您不需要迭代:
In [323]: P=np.arange(1,10).reshape(3,3)[::-1,:]
In [324]: P
Out[324]:
array([[7, 8, 9],
[4, 5, 6],
[1, 2, 3]])
至于您的循环,看一个i,j:
In [325]: for i in range(3):
...: for j in range(3):
...: print(i,j,(i-1)*3+j)
...:
0 0 -3
0 1 -2
0 2 -1
1 0 0
1 1 1
1 2 2
2 0 3
2 1 4
2 2 5
您不需要使用循环,只需将flip()与reshape()一起使用。
import numpy as np
P = np.asarray ([1,2,3,4,5,6,7,8,9])
P = np.flip(P.reshape(3,3), axis=0)
print(P)
[[7 8 9]
[4 5 6]
[1 2 3]]