a = [3,4,5,6]
b = [1,2,3]
adj = np.random.rand(10,10)
adj[a,:][:,b] = adj[a,:][:,b] + 1000
为什么adj
的元素值是这样的adj[a,:][:,b] = adj[a,:][:,b] + 1000
之后不改变?
最佳答案
正如已经指出的,花哨的索引总是返回一个副本,而不是一个切片。因此,您正在修改一个稍后被丢弃的副本。
当使用数组索引多个维度时,这会被广播到一个常见的形状,因此以下任何一个也可以为您解决问题:
a = [[3], [4], [5], [6]]
b = [1, 2, 3]
adj[a, b] += 1000
a = np.array([3, 4, 5, 6]
b = [1, 2, 3]
adj[a[:, None], b] += 1000
当然,对于实际索引,您的第一个选择应该是什么,尽管如果它们不都是连续整数,则它将不起作用:
adj[3:7, 1:4] += 1000
关于python - 使用索引不会更改 numpy 元素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22682428/