【问题标题】:Python indenting numpy matrix yields different results to printing matrix fully [duplicate]Python缩进numpy矩阵产生与完全打印矩阵不同的结果[重复]
【发布时间】:2019-06-13 18:54:06
【问题描述】:

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

在我的代码中,我采用了一个 128x128 元素的 ndarray,其中大部分包含零,但有一些非平凡的数字,并以两种不同的方式打印出来。我用过的第一个

print(array[:][32])

第二个我用过

print(array[33][32])

尝试找到第 33 个元素的值。

当我使用前一种方法时,我在元素 33,32 处得到 0。对于后者,我得到 23。在如何使用 ndarray 方面我是否缺少一些微妙之处?

【问题讨论】:

  • 对于数组,[:] 什么都不做,它甚至不是占位符。 arr[:, 32] 是索引二维数组的有效方法。 arr[:][32]arr[32] 一样,也可以写成arr[32,:]

标签: python numpy matrix


【解决方案1】:

这取决于您所说的 33 个元素值是什么意思。在这里,您处理二维矩阵。

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

第二种情况你取33rd row32th column中的元素,相当于array[33,32]

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

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

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

【讨论】:

  • 所以要仔细检查 array[:][32] 将返回 array[:] 然后 array[32]?
  • 是的,你是对的,当你做 array[:] 时,就像什么都不做。所以基本上它就像在你做 array[:][32] 时调用 array[32]
【解决方案2】:

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

print(array[:, 32])

print(array[33, 32])

取决于您实际尝试提取的值。顶部print 语句为您提供数组的32nd 列(在您的情况下应该是形状为(128,) 的一维数组),而后面的print 语句应该只为您提供行中的单个值33,专栏32

说明

  • array[:][32]

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

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

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

      array[33][32] = 19
      

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

【讨论】:

  • 我想你忘了完成你的帖子。
  • 什么都没忘记。我正在修改它
  • 很抱歉在构思这个问题时遇到了麻烦。那么调用array[:,32]和array[:][32]有什么区别呢?
  • 请参阅我的解释部分的第一部分。您可以将array[:][32] 简化为array[32],这将返回32nd 行。另一方面,array[:,32] 表示“返回每一行中的第 32 个条目”,或者换句话说,32nd 列。
  • @tel 啊我明白了,非常感谢
猜你喜欢
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多