迭代n行的矩阵行

时间:2018-06-09 23:23:45

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

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

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

3 个答案:

答案 0 :(得分:5)

问题是你正在使用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

答案 1 :(得分:1)

尝试以下方法:

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

这会将每行显示为numpy.ndarray

答案 2 :(得分:1)

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

方法-1:

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

方法-2:

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