gpt4 book ai didi

python - 使用索引数组从任意维的 ndarray 中提取 2d ndarray

转载 作者:行者123 更新时间:2023-12-05 04:23:13 27 4
gpt4 key购买 nike

我想根据某些维度的索引位置数组提取 numpy ndarray 的一部分。让我用一个例子来说明这一点

示例数据

dummy = np.random.rand(5,2,100)
X = np.array([[0,1],[4,1],[2,0]])

dummy 是维度为 5x2x100 的原始 ndarray。这个维度是任意的,也可以是 5x2x4x100。
X是索引值矩阵,这里X[:,0]dummy第一维的索引,X [:,1] 那些二维的。 X 中的列数始终是 dummy 中的维数减 1。

示例输出

我想为此示例提取以下形式的 ndarray

[
dummy[0,1,:],
dummy[4,1,:],
dummy[2,0,:]
]

并发症

如果 dummy 中的维数是固定的,这可以通过 dummy[X[:,0],X[:,1],:] 。遗憾的是维度可能不同,例如dummy 可以是 5x2x4x6x100 ndarray 并且 X 相应地是 3x4 。我尝试处理它并没有产生预期的结果。

  • dummy[X,:] 在此示例中生成一个 3x2x2x100 ndarray,与 dummy[X]
  • 相同
  • 迭代地减少 dummy 通过做类似 dummy = dummy[X[:,i],:]i 的迭代器X 的列数也不会减少示例中的 ndarray 过去 3x2x100

我觉得使用 numpy 索引应该很简单,但我想我对解决方案的搜索缺少正确的术语。
有人对此有解决方案吗?

最佳答案

我将尝试为@Michael Szczesny 的回答提供一些可解释性。

首先,请注意,如果您有一个 np.array尺寸 n并通过 m索引 m<n , 那么它将与使用相同 :在维度 >=m .例如,在您的情况下:

dummy[(0, 0)] == dummy[0, 0, :]

鉴于此,请注意您还可以将数组作为索引传递。因此:

dummy[([0, 1], [0, 0])]

这将是一样的:

np.array([dummy[(0,0)], dummy[(1,0)]])

您可以使用以下方式验证:

dummy[([0, 1], [0, 0])] == np.array([dummy[(0,0)], dummy[(1,0)]])

最后,请注意:

(*X.T,)
# (array([0, 4, 2]), array([1, 1, 0]))

你在这里获取每个维度作为一个数组,然后你将得到:

[
dummy[0,1],
dummy[4,1],
dummy[2,0]
]

这与:

[
dummy[0,1,:],
dummy[4,1,:],
dummy[2,0,:]
]

编辑:您可以使用 tuple(X.T) 而不是使用 (*X.T,),这对我来说更有意义

关于python - 使用索引数组从任意维的 ndarray 中提取 2d ndarray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73771467/

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