python - 使用索引不会更改 numpy 元素值

标签 python numpy

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/

相关文章:

python - 在 Python 中从日期时间获取日期

Python 的数学计算很奇怪,为什么会这样?

python - 在 pandas Dataframe 中获取多个 groupby 中的共同值

python - Numpy:查找范围内元素的索引

python - 查找二维数组中未满 NaN 的第一行的行索引

python - 在 macOS BigSur 上使用 Homebrew 软件 python 安装 numpy 的问题

python - 在 Python 中评估 boolean 元组

python - 如何从安然电子邮件正文中删除 "forwarded message"标题和不需要的内容?

c++ - 使用 SWIG 将 C++ <vector> 包装为 python NumPy 数组

python - 如何在 python 中合并两个或三个 3D 数组?