Python 从基于3D矩阵的2D矩阵中的位置获取值
假设我有一个numpy矩阵:Python 从基于3D矩阵的2D矩阵中的位置获取值,python,numpy,indexing,array-broadcasting,Python,Numpy,Indexing,Array Broadcasting,假设我有一个numpy矩阵:data=np.random.rand(200,50,100)并且有我需要的位置值:locs=np.random.randint(50,size=(200,2)) 如何获得形状矩阵(200,2100)?基本上,我想从数据中获取locs指定位置的值 如果我这样做:data[locs],我最终得到一个形状矩阵(200,2,50,100),而不是(200,2100) 根据要求更新了更多详细信息: 如果我们有: data = np.arange(125) reshaped =
data=np.random.rand(200,50,100)
并且有我需要的位置值:locs=np.random.randint(50,size=(200,2))
如何获得形状矩阵(200,2100)
?基本上,我想从数据
中获取locs
指定位置的值
如果我这样做:data[locs]
,我最终得到一个形状矩阵(200,2,50,100)
,而不是(200,2100)
根据要求更新了更多详细信息:
如果我们有:
data = np.arange(125)
reshaped = np.reshape(data, (5, 5, 5))
locs = [[3, 4], [2, 1], [1, 3], [3, 3], [0, 0]]
然后执行类似于data[locs]
的操作应该会得到以下输出:
array([[[ 15, 16, 17, 18, 19],
[ 20, 21, 22, 23, 24]],
[[ 35, 36, 37, 38, 39],
[ 30, 31, 32, 33, 34]],
[[ 55, 56, 57, 58, 59],
[ 65, 66, 67, 68, 69]],
[[ 90, 91, 92, 93, 94],
[ 90, 91, 92, 93, 94]],
[[100, 101, 102, 103, 104],
[100, 101, 102, 103, 104]]])
高级索引的结果将是索引的维度上的索引形状
data[locs]
相当于data[locs,:,:]
,因此您的形状将是locs.shape+data.shape[1://code>,或(200,2,50,100)
您似乎要求使用locs
索引数据的轴1,使轴0与locs
中的行保持同步。为此,您需要沿轴1使用LOC
索引,并在轴0中提供从0到200的索引
重要的是要记住,所有高级索引必须以相同的形状广播。由于LOC
是成型的(200,2)
,第一个索引必须是成型的(200,1)
或(200,2)
,才能正确广播。我将展示前者,因为它更简单、更有效
data = np.random.rand(200, 50, 100)
locs = np.random.randint(50, size=(200, 2))
rows = np.arange(200).reshape(-1, 1)
result = data[rows, locs, :]
用一个小例子来说明“地点”是什么意思。您有一个(200,50,100)
输入和一个(200,2)
索引。您实际上打算如何将其映射到输出?为
循环编写一个,也是一个很有用的工具。我想说的是,输出的形状本身并不能告诉你什么。内容非常重要。我已经回答了您的问题,但请澄清问题。有很多方法可以获得200
维度。我确实希望轴1与轴0保持同步。这样做有效!非常感谢你!很高兴它成功了。谢谢你更新这个问题。