python - 如何根据另一个二维数组中给出的索引对二维数组进行切片
问题描述
我有一个MxN
名为的数组A
,用于存储我想要的数据。我有另一个存储M x N2
数组B
索引的数组,并且N2<N
. 每一行B
存储我想从 A 获取该行的元素的索引。例如,以下代码适用于我:
A_reduced = np.zeros((M,N2))
for i in range(M):
A_reduced[i,:] = A[i,B[i,:]]
是否有任何“矢量化”方法可以从中提取所需元素,A
而B
不是循环遍历每一行?
解决方案
您可以利用数组索引并使用 reshape:
# set up M=N=4, N2=2
a = np.arange(16).reshape(4,4)
b = np.array([[1,2],[0,1],[2,3],[1,3]])
row_idx = np.repeat(np.arange(b.shape[0]),b.shape[1])
col_idx = b.ravel()
# output:
a[row_idx, col_idx].reshape(b.shape)
输出:
array([[ 1, 2],
[ 4, 5],
[10, 11],
[13, 15]])
更新:另一个类似的解决方案
row_idx = np.repeat(np.arange(b.shape[0]),b.shape[1]).reshape(b.shape)
# output
a[row_idx,b]
推荐阅读
- eclipse - eclipse中的程序执行太慢了,昨天同一程序的执行速度很快
- c# - 如何调用,API 中的 POST 方法,其中包含一个类 Content
- spring - How to config JPA in spring mvc?
- pentaho - 为什么我在 pentaho cde 中传递日期参数时看不到示例数据图表?
- reactjs - reactjs链接不起作用,在ajax请求后渲染时
- netsuite - 通过 Suitelet 使用 Netsuite 信用卡付款
- primefaces - 在 Primefaces 数据表单元格编辑器中选择每个项目上的选择行复选框
- python - 为衰减变量优化以下python代码部分
- git - 如何在 azure devops 中设置默认分支策略
- c - 试图从 C 代码中获取 windows 版本