【问题标题】:Iterate over a numpy Matrix rows遍历一个 numpy Matrix 行
【发布时间】:2018-11-19 14:51:12
【问题描述】:

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

我正在尝试从 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) 打印一个数组,我需要每一行都执行一些操作。

【问题讨论】:

  • 看起来您正在访问行。你是说列吗?
  • 您正在获取行。只是np.matrix的行还是np.matrix,显示为2d。
  • 正如 jpp 所说,您可能想要使用数组。但是如果你坚持使用矩阵(例如为了乘法的方便),那么请参考这篇文章:stackoverflow.com/questions/16468717/…

标签: python arrays python-3.x numpy matrix


【解决方案1】:

问题是您使用的是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

【讨论】:

    【解决方案2】:

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

    方法一:

    使用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]
    

    【讨论】:

      【解决方案3】:

      尝试以下方法:

      for p in result:
          print(numpy.array(p)[0])
      

      这会将每一行作为numpy.ndarray

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-29
        • 1970-01-01
        • 1970-01-01
        • 2018-02-03
        • 1970-01-01
        • 2015-11-22
        • 1970-01-01
        • 2018-04-22
        相关资源
        最近更新 更多