python - 使用较低暗淡的索引数组索引 numpy 数组会产生比两者都更高暗淡的数组

标签 python arrays numpy

a = np.zeros((5,4,3))
v = np.ones((5, 4), dtype=int)
data = a[v]
shp = data.shape

此代码给出 shp==(5,4,4,3)

我不明白为什么。怎么才能输出更大的数组呢?对我来说毫无意义,希望得到解释。

最佳答案

这被称为 advanced indexing .高级索引允许您根据 N 维索引选择输入数组中的任意元素。

让我们用另一个例子来更清楚地说明:

a = np.random.randint(1, 5, (5,4,3))
v = np.ones((5, 4), dtype=int)

假设在这种情况下 a 是:

array([[[2, 1, 1],
        [3, 4, 4],
        [4, 3, 2],
        [2, 2, 2]],

       [[4, 4, 1],
        [3, 3, 4],
        [3, 4, 2],
        [1, 3, 1]],

       [[3, 1, 3],
        [4, 3, 1],
        [2, 1, 4],
        [1, 2, 2]],
        ...

通过使用 np.ones 数组进行索引:

print(v)

array([[1, 1, 1, 1],
       [1, 1, 1, 1],
       [1, 1, 1, 1],
       [1, 1, 1, 1],
       [1, 1, 1, 1]])

您只需沿第一个轴将 a 索引为 1 的次数与 v 的次数相同。换句话说,当你这样做时:

a[1]

[[4, 4, 1],
 [3, 3, 4],
 [3, 4, 2],
 [1, 3, 1]]

您正在沿第一个轴进行索引,因为没有指定沿其他轴的索引。这与执行 a[1, ...] 相同,即沿剩余轴截取完整切片。因此,通过使用由 1 组成的 2D 数组进行索引,您会将上述 2D 数组 (5, 4) 次堆叠在一起,从而得到形状为 (5, 4, 4, 3) 的 ndarray。或者换句话说,a[1],形状为 (4,3),堆叠 5*4=20 次。

因此,在这种情况下,您将得到:

array([[[[4, 4, 1],
         [3, 3, 4],
         [3, 4, 2],
         [1, 3, 1]],

        [[4, 4, 1],
         [3, 3, 4],
         [3, 4, 2],
         [1, 3, 1]],
         ...

关于python - 使用较低暗淡的索引数组索引 numpy 数组会产生比两者都更高暗淡的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56947819/

相关文章:

python - 子集 Pandas 数据框

python - 如何在 Python 中接收 Github Webhooks

java - Android 中的 Parse.com 云代码和 HashMap : How to set an array inside Hashmap?

c - 我不明白为什么这个循环会卡住

python - 如何比较python中的数组列表?

python - 直接将 Pandas 数据帧转换为稀疏 Numpy 矩阵

python-3.x - 如何附加不同大小的 numpy 数组并将 na 放在空位置

python - 基于来自 pandas/python 中多列的字符串对一列中的值求和

python - 按两列分组,求和、计数并在单独的列中显示输出值( Pandas )

c - 为什么这个二分搜索会给我一个无限循环?