矢量化的方式来改变基于另一个数组的numpy数组值

时间:2018-05-17 18:12:33

标签: python python-3.x pandas numpy

是否存在将值设置为确定的矢量化(或更好)方式 numpy数组的数据点基于另一种方式而不是这种方式?

import numpy as np

data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
pos = np.array([[1, 2], [2, 0]])

for p in pos:
    i,j = p
    data[i,j] = 20

print(data)

2 个答案:

答案 0 :(得分:3)

使用更高版本的Python,您可以通过解压缩另一个迭代来在理解中创建一个列表。然后我们传递该列表以进行切片分配。

我们访问(切片)的方式是通过Integer Array Indexing

完成的
data[[*pos]] = 20
data

array([[ 1,  2,  3],
       [ 4,  5, 20],
       [20,  8,  9]])

对于其他版本的Python,请尝试:

data[pos.tolist()] = 20
data

答案 1 :(得分:0)

只需扩展@piRSquared的答案即可。

import numpy as np

data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9],[10,11,12]])
pos = np.array([[1.0, 2.0,0.03], [2.0, 0.0,0.06]])

data = data.astype(float)

data[pos[:,0:2].astype(int).tolist()] = pos[:,-1]
data

array([[  1.  ,   2.  ,   3.  ],
       [  4.  ,   5.  ,   0.03],
       [  0.06,   8.  ,   9.  ],
       [ 10.  ,  11.  ,  12.  ]])