首先,我试图找到我的问题的答案(我认为这是非常基本的)在谷歌和网站上搜索,但没有任何结果。
我正试图从一个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)
打印一个数组,我需要每一行来执行一些操作。
答案 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)
有两种方式(两者都基本归结为相同的逻辑)
使用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]
将self
作为ndarray
对象返回
相当于np.asarray(self)
。
In [17]: for row in result.getA():
...: print(row)
...:
[11 12 13]
[21 22 23]
[31 32 33]