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/