关于numpy三维数组de几何表达方式?

第一个数组:

[[[0,1,2,3],
[4,5,6,7]],

[[8,9,10,11],
[12,13,14,15]]]

第二个数组:

[[[0,8],
[1,9],
[2,10],
[3,11]],

[[4,12],
[5,13],
[6,14],
[7,15]]]

这两个数组是一样的吗,怎么它的形状是什么样的,有不同吗?

参考GPT和自己的思路:这两个数组不完全相同,虽然它们的数值一样,但是它们的几何表达方式不同。第一个数组是一个二维数组,其中每个元素又包含一个长度为4的一维数组,可以理解为是一个2行4列的矩阵。而第二个数组是一个三维数组,其中每个元素又包含一个2行2列的二维数组,可以理解为是一个2行2列的矩阵,但这个矩阵有4层,即一个4页的矩阵。因此,它们的形状不同,第一个数组的形状是(2,2,4),第二个数组的形状是(2,4,2)。

第一个数组的形状是(2, 2, 4)
第二个数组的形状是(2, 4, 2)

  • 看下这篇博客,也许你就懂了,链接:使用numpy解决图像维度变换问题
  • 除此之外, 这篇博客: 【Python】numpy数组索引中的 三,布尔索引 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 布尔索引主要是利用的布尔数组,当数组的比较操作(比如==、>=)也是可以向量化,这些比较运算的结果是一个布尔数据类型的数组。该数组与原数组的长度和形状都是一致,我们可以获取到对应位置为True的值。

    bool_arr = arr>3
    arr[bool_arr]   # array([4, 5, 6, 7, 8])
    

    通过布尔索引获得的子数组为副本,修改后不影响原数组。

    arr = np.array([[0, 1, 2],
           [3, 4, 5],
           [6, 7, 8]])
    arr2 = arr[ arr>3]
    arr2 = -1
    arr
    """
    array([[0, 1, 2],
           [3, 4, 5],
           [6, 7, 8]])
    """