如何使用另一个数组中的值更新numpy数组的所有值

时间:2018-12-15 22:51:34

标签: python arrays numpy

*问题已编辑/更新以添加示例

大家好!我有这个a np.array。基于它的参考值,我想更新数组b,这是我的矩阵。 a的“第一列”代表代码,“第二列”是我的参考值。矩阵中填充了代码,我必须替换它们。参见下面的示例。

import numpy as np
a = np.asarray([[0, 11], [1, 22], [2, 33]])
b = np.asarray([[0, 14, 12, 2], [1, 1, 7, 0], [0, 0,3,5], [1, 2, 2, 6]])

换句话说:我想分别用11、22、33替换“ b”中的0、1、2值。

考虑到我的真实a数组具有+-50个代码并且我的真实b矩阵的形状为(850,850),这是最好的方法。

谢谢!

2 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,此示例应显示您的要求?

假设a是上面列出的矩阵,而b是要写入的列表

import numpy as np
a = np.asarray([[0, 10], [2, 30], [1, 40]])
b = np.zeros(3)
b[a[:, 0]] = a[:, 1]

其中[:, 0]是要更改的索引,而[:, 1]是要填充的索引

答案 1 :(得分:0)

如果代码不是太长的整数,则只需构建正确的查找表:

lut = np.arange(b.max()+1)
k,v = a.T
lut[k] = v

对于:

>>> b
[[ 0 14 12  2]
 [ 1  1  7  0]
 [ 0  0  3  5]
 [ 1  2  2  6]]

>>> lut[b]
[[11 14 12 33]
 [22 22  7 11]
 [11 11  3  5]
 [22 33 33  6]]

未定义的代码被映射到它们自己code=value