将值分配给numpy数组归零数组

问题描述 投票:0回答:2

我一直试图将一个数组中的值分配给另一个数组,特别是将一个带有值的数组分配给一个零数组。这些值在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.]])

输出数组的扩展有输出变化的原因吗?

python arrays numpy assign
2个回答
0
投票

您不需要迭代:

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

0
投票

您不需要使用循环,只需将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]]
© www.soinside.com 2019 - 2024. All rights reserved.