Python缩进numpy矩阵产生与完全打印矩阵不同的结果

时间:2019-01-19 22:58:51

标签: python numpy matrix

打印ndarray对象似乎比缩进ndarray本身产生不同的结果。

在我的代码中,我采用了一个128x128元素的ndarray,该元素主要包含零,但包含一些非平凡的数字,并以两种不同的方式将它们打印出来。我第一次使用

print(array[:][32])

第二次我用过

print(array[33][32])

尝试查找33个元素的值。

使用前一种方法执行此操作时,在元素33,32处获得0。有了后者,我得到了23。关于如何使用ndarrays,我是否缺少微妙之处?

2 个答案:

答案 0 :(得分:1)

这取决于33元素值的含义。在这里,您处理一个2D矩阵。

请注意,为简单起见。我会说(x + 1)行的第xth行

在第二种情况下,您将元素放在33rd row32th column中,它等效于array[33,32]

在第一种情况下,您将返回第32行。

要注意的重要一点是,您在这里进行链索引编制。

array[:,32](将返回第32列的所有值)不等同于array[:][32],后者将首先返回您的数组,然后显示第32行。

答案 1 :(得分:0)

不要像您正在做的那样对二维数组进行“两次”索引,这不是Numpy的正确语法。而是:

print(array[:, 32])

print(array[33, 32])

取决于您要实际提取的值。顶部的print声明为您提供数组的32列(在您的情况下,该列应为形状为(128,)的一维数组),而后面的print语句应为只需在行33的列32上给您一个值即可。

说明

  • array[:][32]

    • array[:]仅返回整个数组。因此,array[:][32]等效于仅调用array[32]。这将返回32的第0行(从array开始),在您的情况下,该行应包含128值。
  • array[33][32]

    • array[33]将返回2D数组的第33行。这将是形状为(128,)的一维数组。接下来,索引[32]将应用于返回的行,因此您将在行3332处获得单个值。因此,在这种情况下:

      array[33][32] == array[33, 32]
      
    • 但是,重复的索引语法仍然不是一个好主意。它比使用array[33, 32]这样的语法要慢(因为array[33][32]将触发两个单独的索引操作)。此外,它还可能导致意外行为。例如,如果您尝试分配给索引值:

      array[33][32] = 19
      

      这可能最终不会更改array中的任何值,因为通过重复索引操作array[33][32]可能会返回原始数组的副本。