gpt4 book ai didi

python - 根据不同 numpy 数组中的索引将标量添加到 numpy 矩阵

转载 作者:行者123 更新时间:2023-12-05 06:08:18 25 4
gpt4 key购买 nike

如果这个问题的框架不好,我很抱歉。所以我宁愿用一个例子来解释。我有一个 numpy 矩阵:

a = np.array([[0.5, 0.8, 0.1], [0.6, 0.9, 0.3], [0.7, 0.4, 0.8], [0.8, 0.7, 0.6]])

还有另一个 numpy 数组,如图所示:

b = np.array([1, 0, 2, 2])

在给定条件下 b 中的值将在 range(a.shape[1])b.shape[1] == a.shape[0] .现在这是我需要执行的操作。

对于每个索引 i a的,以及相应的索引i b,我需要从索引 j 中减去 1的 a[i]其中 j== b[i]

所以在我的示例中,a[0] == [0.5 0.8 0.1]b[0] == 1 .因此我需要减去 1来自 a[0][b[0]]这样a[0] = [0.5, -0.2, 0.1] .必须对 a 的所有行执行此操作.有没有无需我逐行遍历所有行或列的直接解决方案?

谢谢。

最佳答案

使用numpy indexing .看这个post一个很好的介绍:

import numpy as np

a = np.array([[0.5, 0.8, 0.1], [0.6, 0.9, 0.3], [0.7, 0.4, 0.8], [0.8, 0.7, 0.6]])
b = np.array([1, 0, 2, 2])

a[np.arange(a.shape[0]), b] -= 1

print(a)

输出

[[ 0.5 -0.2  0.1]
[-0.4 0.9 0.3]
[ 0.7 0.4 -0.2]
[ 0.8 0.7 -0.4]]

作为替代用途 substract.at :

np.subtract.at(a, (np.arange(a.shape[0]), b), 1)
print(a)

输出

[[ 0.5 -0.2  0.1]
[-0.4 0.9 0.3]
[ 0.7 0.4 -0.2]
[ 0.8 0.7 -0.4]]

主要思想是:

np.arange(a.shape[0])  # shape[0] is equals to the numbers of rows

生成行的索引:

[0 1 2 3]

关于python - 根据不同 numpy 数组中的索引将标量添加到 numpy 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65142442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com