【发布时间】:2018-10-25 23:59:04
【问题描述】:
我有一个 3D numpy 数组 data 和另一个索引数组 pos(索引本身就是一个 numpy 数组,这使得后一个数组成为 2D 数组):
import numpy as np
data = np.arange(8).reshape(2, 2, -1)
#array([[[0, 1],
# [2, 3]],
#
# [[4, 5],
# [6, 7]]])
pos = np.array([[1, 1, 0], [0, 1, 0], [1, 0, 0]])
#array([[1, 1, 0],
# [0, 1, 0],
# [1, 0, 0]])
我想使用来自pos 的索引来选择和/或改变来自data 的元素。我可以使用for 循环或列表理解来进行选择:
[data[tuple(i)] for i in pos]
#[6, 2, 4]
data[[i for i in pos.T]]
#array([6, 2, 4])
但这似乎不是一种麻木的方式。这个问题有向量化的numpy解决方案吗?
【问题讨论】:
-
您是否关心该方法是否返回视图与副本?
-
从技术上讲不是一个完全的骗局。但是所有相关信息都在那里。如果您想重新打开它,请告诉我。
-
如果您对答案或受骗不满意,请在此处 ping 我们中的任何一个。我们很乐意重新开放并为此提供赏金,以激励更聪明的人提出尚不存在的解决方案;-)
-
@piRSquared 找到了一个完全正确的骗子。
-
@Divakar 谢谢
标签: python arrays numpy indexing