我有vecfield
,这是一个ndarray
,在形状为(w, h)
或(w, h, d)
的(离散的)二维或三维空间中,每个空间位置都有m
条目。现在我得到一个ndarray
,其中有一个索引列表(i, j)
或(i, j, k)
,我想读取每个索引对应的m
条目。你知道吗
代码(对于2D)可能更有帮助:
vecfield = np.zeros([w, h, m])
fill_me_with_data(vecfield)
idx = generate_indices()
# idx is now for example ndarray with [[0, 0], [9, 8], [15, 6], [9, 1]]
result = vecfield[idx, :]
# result should now be 4 x m (4 because 'idx' has 4 indices)
看起来idx被“线性化”,然后用作索引,所以它不是这样工作的。我怎样才能实现我想要的?
直接用
idx
索引可以有效地用这个(3,2)数组替换第一个维度(大小为4)。换句话说,它为idx
中的所有6个值选择vec[i,:,:]
。你知道吗Divakar建议:
它使用
idx
的第一列索引第一个维度,第二列索引第二个维度。你知道吗List zip也可以工作,但需要
*
:与第一个答案一样,它用(0,1,3)索引第一个dim。如果
idx
是一个列表列表而不是一个数组,那么它就可以工作。等效数组为:总之,要在2维中选取
n
项,需要2个n
元素列表/数组。你知道吗您应该了解numpy高级索引的工作方式http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html。我想你想要的是:
zip(idx)
返回第一个组件的列表,后跟第二个组件的列表,这是高级索引需要传递的内容。你知道吗相关问题 更多 >
编程相关推荐