python - 根据另一个数组中指定的列从二维 numpy 数组中获取每行的值
问题描述
给定一个 2D numpy 数组A
和一个 1D numpy 数组col
,它们具有相同的行数和列的值A
,我怎样才能得到一个新的 1D 数组,它从 中的每一行中选择相应的列A
?
例子:
np.random.seed(0)
A = np.random.randint(10, size=(5, 3))
A
# array([[5, 0, 3],
# [3, 7, 9],
# [3, 5, 2],
# [4, 7, 6],
# [8, 8, 1]])
col = np.random.randint(A.shape[1], size=A.shape[0])
col
# array([2, 2, 0, 1, 1])
基于col
,我想从第 0 行和第 1 行获取元素 2,从第 2 行获取元素 0,从第 3 行和第 4 行获取元素 1: [3, 9, 3, 7, 8]
。
正常的索引不起作用:
A[col]
# array([[3, 5, 2],
# [3, 5, 2],
# [5, 0, 3],
# [3, 7, 9],
# [3, 7, 9]])
A[:, col]
# array([[3, 3, 5, 0, 0],
# [9, 9, 3, 7, 7],
# [2, 2, 3, 5, 5],
# [6, 6, 4, 7, 7],
# [1, 1, 8, 8, 8]])
解决方案
这可行,但对于大型数组来说非常慢:
A[:, col].diagonal()
# array([3, 9, 3, 7, 8])
推荐阅读
- laravel - Route 中缺少必需的参数
- java - 如何修复此 java 错误 - $javac LoginAssignment.java
- typescript - 如何在扩展接口方法中设置`this`来输入变量
- node.js - 将变量从 Rails 应用程序传递到节点包
- flutter - 使用 Flutter 滚动到 NestedScrollView 内 TabView 内的 ListView 结束
- python - 两个字符串的最长公共子串
- git - 合并包含不同文件的本地和远程 git 存储库
- python - 当我的输入显示结果时,为什么我的 NN 的错误不会发散到零
- sql - 如何使两个标题一个是静态的,另一个是动态的?
- python - 为什么 set() 在 Python 中表现得如此不直观?