numpy中2d数组的选定元素的向量化赋值语句

时间:2012-11-11 16:05:33

标签: python arrays numpy indexing vectorization

我是python的初学者。我想知道是否有一个好的"在不使用for循环的情况下执行此操作的方法。 考虑问题

u = zeros((4,2))
u_pres = array([100,200,300])
row_col_index = array([[0,0,2], [0,1,1]])

我想将u [0,0],u [0,1]和u [2,1]分别指定为100,200和300。 我想做一些表格

u[row_col_index] = u_pres

如果你是一个1d数组这样的分配工作,但我无法弄清楚如何使这个工作2d数组。 您的建议将是最有帮助的。 感谢

1 个答案:

答案 0 :(得分:0)

你快到了。

您需要的是以下内容:

u[row_col_index[0], row_col_index[1]] = u_pres

说明:

既然你说你是Python的初学者(我也是!),我想我可能会告诉你这个;它被视为 unpythonic 以您的方式加载模块:

#BAD
from numpy import *
#GOOD
from numpy import array #or whatever it is you need
#GOOD
import numpy as np #if you need lots of things, this is better

说明:

In [18]: u = np.zeros(10)

In [19]: u
Out[19]: array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])

#1D assignment
In [20]: u[0] = 1

In [21]: u[1] = 10

In [22]: u[-1] = 9 #last element

In [23]: u[-2] = np.pi #second last element

In [24]: u
Out[24]: 
array([  1.        ,  10.        ,   0.        ,   0.        ,
         0.        ,   0.        ,   0.        ,   0.        ,
         3.14159265,   9.        ])

In [25]: u.shape
Out[25]: (10,)

In [27]: u[9] #calling
Out[27]: 9.0

#2D case
In [28]: y = np.zeros((4,2))

In [29]: y
Out[29]: 
array([[ 0.,  0.],
       [ 0.,  0.],
       [ 0.,  0.],
       [ 0.,  0.]])

In [30]: y[1] = 10 #this will assign all the second row to be 10

In [31]: y
Out[31]: 
array([[  0.,   0.],
       [ 10.,  10.],
       [  0.,   0.],
       [  0.,   0.]])

In [32]: y[0,1] = 9 #now this is 2D assignment, we use 2 indices!

In [33]: y[3] = np.pi #all 4th row, similar to y[3,:], ':' means all

In [34]: y[2,1] #3rd row, 2nd column
Out[34]: 0.0


In [36]: y[2,1] = 7

In [37]: 

In [37]: y
Out[37]: 
array([[  0.        ,   9.        ],
       [ 10.        ,  10.        ],
       [  0.        ,   7.        ],
       [  3.14159265,   3.14159265]])

在您的情况下,我们有row_col_indexrow_col_index[0])的第一个数组用于和第二个数组(row_col_index[1])用于列。

最后,如果您没有使用ipython,我建议您这样做,它会帮助您完成学习过程以及许多其他事情。

我希望这会有所帮助。