python - python numpy`np.take`与二维数组
问题描述
我正在尝试从具有给定坐标列表的 2D numpy 数组中获取元素列表,并且我想避免使用循环。我看到它np.take
适用于一维数组,但我不能让它适用于二维数组。
例子:
a = np.array([[1,2,3], [4,5,6]])
print(a)
# [[1 2 3]
# [4 5 6]]
np.take(a, [[1,2]])
# gives [2, 3] but I want just [6]
我想避免循环,因为我认为这会更慢(我需要速度)。但是,如果您可以说服我循环与现有的 numpy 函数解决方案一样快,那么我可以选择它。
解决方案
如果我理解正确,你有一个这样的坐标列表:
coords = [[y0, x0], [y1, x1], ...]
要a
在这些坐标处获取数组的值,您需要:
a[[y0, y1, ...], [x0, x1, ...]]
所以a[coords]
行不通。一种方法是:
Y = [c[0] for c in coords]
X = [c[1] for c in coords]
或者
Y = np.transpose(coords)[0]
X = np.transpose(coords)[1]
然后
a[Y, X]
推荐阅读
- java - 试图划分颜色来画彩虹甜甜圈
- powershell - Get-Content 使用不同的 Get-ChildItem 产品
- ubuntu - centos 上的 puppet fact 失败但在 ubuntu 中有效
- ios - 没有 Sidekick 的 Nativescript 代码签名
- java - 为 JDBC 使用正确配置的 CLASSPATH 变量是什么样的?
- c++ - 在我的场景中添加一个带有按钮的 scrolabble 窗口
- javascript - Node.js - 重复的 require('path'/'module') 语句
- python - JSON 中的大型日志 - 数据处理和分析
- javascript - 为什么在本例中使用 .map 时必须访问对象属性
- unity3d - 向直线旋转游戏对象