First, I tried to find an answer to my question ( which I think is pretty basic) searching in google and in the site, but nothing came up.
I'm trying to get the rows from a numpy matrix, but I can't. For example if I use this:
result = numpy.matrix([[11, 12, 13],
                       [21, 22, 23],
                       [31, 32, 33]])
for p in result:
    print(p[0])
prints this:
[[11 12 13]]
[[21 22 23]]
[[31 32 33]]
The same if I use just p
What I have to do to access every row? numpy.nditer(result) prints an array, and I need every row to perform some operations.
The problem is you are using np.matrix. Use np.array instead and simply iterate without indexing:
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]
Explanation
What you are seeing is the effect of numpy.matrix requiring each row to have 2 dimensions. This is unnecessary and anti-pattern for NumPy.
There is a history behind numpy.matrix. It was used initial for convenience of matrix multiplication operators. But this is no longer an issue since @ is possible (Python 3.5+) instead of nested dot calls. Therefore, by default, use numpy.array.
There are two ways (both essentially boils down to same logic)
Use result.A
Return self as an ndarray object.
Equivalent to np.asarray(self).
In [16]: for row in result.A:
    ...:     print(row)
    ...:     
[11 12 13]
[21 22 23]
[31 32 33]
Use result.getA()
Return self as an ndarray object.
Equivalent to np.asarray(self).
In [17]: for row in result.getA():
    ...:     print(row)
    ...:     
[11 12 13]
[21 22 23]
[31 32 33]
                        Try the following:
for p in result:
    print(numpy.array(p)[0])
This gives you each row as a numpy.ndarray.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With