迭代一个 numpy 矩阵行

新手上路,请多包涵

首先,我试图在谷歌和网站上搜索我的问题(我认为这是非常基本的)的答案,但没有任何结果。

我正在尝试从 numpy 矩阵中获取行,但我做不到。例如,如果我使用这个:

 result = numpy.matrix([[11, 12, 13],
                       [21, 22, 23],
                       [31, 32, 33]])

for p in result:
    print(p[0])

打印这个:

 [[11 12 13]]
[[21 22 23]]
[[31 32 33]]

如果我只使用 p

我必须做什么才能访问每一行? numpy.nditer(result) 打印一个数组,我需要每一行来执行一些操作。

原文由 exsnake 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 548
2 个回答

问题是您正在使用 np.matrix 。使用 np.array 代替并简单地迭代而不索引:

 result = np.array([[11, 12, 13],
                   [21, 22, 23],
                   [31, 32, 33]])

for p in result:
    print(p)

[11 12 13]
[21 22 23]
[31 32 33]

解释

您看到的是 numpy.matrix 要求每一 有 2 个维度的效果。这对于 NumPy 来说是不必要的和反模式的。

背后有一段历史 numpy.matrix 。最初使用它是为了方便矩阵乘法运算符。但这不再是一个问题,因为 @ 是可能的(Python 3.5+)而不是嵌套的 dot 调用。因此,默认情况下,使用 numpy.array

原文由 jpp 发布,翻译遵循 CC BY-SA 4.0 许可协议

有两种方法(两者基本上都归结为相同的逻辑)

方法一:

使用 result.A

返回 self 作为 ndarray 对象。

相当于 np.asarray(self)

 In [16]: for row in result.A:
    ...:     print(row)
    ...:
[11 12 13]
[21 22 23]
[31 32 33]


方法二:

使用 result.getA()

返回 self 作为 ndarray 对象。

相当于 np.asarray(self)

 In [17]: for row in result.getA():
    ...:     print(row)
    ...:
[11 12 13]
[21 22 23]
[31 32 33]

原文由 kmario23 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题