【发布时间】:2020-07-30 04:58:14
【问题描述】:
我有一个问题困扰了我好几天。 假设我们在 Numpy 中定义了一个二维数组:
x = np.array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
我们还定义了一个用于索引的一维数组,比方说:
ind = np.array([2,1])
如果我们尝试x[ind],我们会得到:
array([[6, 7, 8],
[3, 4, 5]])
这很有意义:x 的第 2 行和第 1 行。
如果我们运行:x[:,ind],我们将得到:
array([[2, 1],
[5, 4],
[8, 7]])
同样,这很有意义 - 我们收到第 2 列,然后是第 1 列
现在我们将索引数组定义为 2d:
ind = np.array([[2,1],
[2,2]])
如果我们运行x[ind],我们会得到:
array([[[6, 7, 8],
[3, 4, 5]],
[[6, 7, 8],
[6, 7, 8]]])
同样,这是有道理的 - 对于索引二维数组中的每一行,我们都会收到一个二维数组,它表示原始二维数组 x 中的相应行。
但是,如果我们运行 x[:,ind],我们会收到下一个数组:
array([[[2, 1],
[2, 2]],
[[5, 4],
[5, 5]],
[[8, 7],
[8, 8]]])
我不明白这个输出,因为它返回索引行中的特定项目,而不是完整的行。我会假设,就像x[:,ind] 是一维数组时的情况一样,我们将收到二维数组,其中包含来自原始x 数组的原始列。
【问题讨论】: