gpt4 book ai didi

python - 使用坐标列表切片 numpy 数组

转载 作者:太空宇宙 更新时间:2023-11-04 07:33:18 25 4
gpt4 key购买 nike

考虑一个形状为 (a,b,c) 的 numpy ndarray M 和一个坐标列表 [(b0,c0),( b1,c1),...,(bn,cn)].

我想要以下向量集合:[M[:,b0,c0],M[:,b1,c1],...,M[:,bn,cn]] .我怎样才能通过列表理解实现这一目标?

编辑:我需要一个适用于任意数量维度的解决方案,即在这种情况下(比如)M.shape = (a,b,c,d) 和坐标 = [(b0,c0,d0),...,(bn,cn,dn)],以及更高维的情况。

最佳答案

您不想使用列表理解来执行此操作。 “花式索引”可以一次性完成所有事情。我建议:

inds = [(b0,c0),(b1,c1),...,(bn,cn)]

#inds_array[0] = [b0, b1, b2, ...]
inds_array = np.moveaxis(np.array(inds), -1, 0)

M[np.index_exp[:] + tuple(inds_array)]

演示:

>>> x, y, z = np.ogrid[:2,:4,:5]
>>> M = 100*x + 10*y + z
>>> M.shape
(2, 4, 5)
>>> inds = [(0, 0), (2, 1), (3, 4), (1, 2)]
>>> inds_array = np.moveaxis(np.array(inds), -1, 0); inds_array
array([[0, 2, 3, 1],
[0, 1, 4, 2]])
>>> M[np.index_exp[:] + tuple(inds_array)] # same as M[:, [0, 2, 3, 1], [0, 1, 4, 2]]
array([[ 0, 21, 34, 12],
[100, 121, 134, 112]])

关于python - 使用坐标列表切片 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42537956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com