*问题已编辑/更新以添加示例
大家好!我有这个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),这是最好的方法。
谢谢!
答案 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
。