python - Numpy:这段代码彼此有何不同?

标签 python numpy

r为一个数组,其中每个元素都是一个列索引(小于Nr的大小为M) 和 P 是一个 MxN 数组。

以下两个片段的行为不同。为什么?

1.

P[:, r] += 1

2.

for i in range(len(r)):
    P[i, r[i]] += 1

最佳答案

第一个为 r 的每个元素选择一整列。第二个只是一个元素。您可以像这样直接比较这两种情况:

>>> P = np.arange(12).reshape(4, 3)
>>> r = np.random.randint(0, 3, (4,))
>>> r
array([1, 1, 2, 0])
>>> 
>>> P[:, r]
array([[ 1,  1,  2,  0],
       [ 4,  4,  5,  3],
       [ 7,  7,  8,  6],
       [10, 10, 11,  9]])
>>> P[np.arange(4), r]
array([1, 4, 8, 9])

如您所见,第二个基本上产生第一个的对角线。

您可能会受益于查看 numpy docs 中的“结合高级索引和基本索引”部分.

关于python - Numpy:这段代码彼此有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50439668/

相关文章:

python - 区分本地导入和系统导入

python - 分发本地 Flask 应用程序

python - Tensorflow:简单图像图像分类器在时代之间根本不更新

python - 将 numpy (n,) 向量 reshape 为 (n,1) 向量

python - 尝试在 python3.9 中安装 numpy 并在 Windows 10 中准备车轮元数据时出错。我没有使用虚拟环境进行检查

python - GitPython 中当前日期和前一段时间之间的 git diff

python - 为什么我没有从列表理解检查真值中获得索引返回?

python - NumPy ndarray dtype 的类型提示?

python - 带有数字和字符串数组的 numpy.column_stack

java - 使用 Jolokia 监控同一 Tomcat 服务器上 webapp 的 JMX 端点