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