如果我想在整个矩阵上应用函数,为什么fromiter失败?
>>> aaa = np.matrix([[2],[23]])
>>> np.fromiter( [x/2 for x in aaa], np.float)
array([ 1., 11.])
这很好用,但如果矩阵是2D,我会收到以下错误:
>>> aaa = np.matrix([[2,2],[1,23]])
>>> aaa
matrix([[ 2, 2],
[ 1, 23]])
>>> np.fromiter( [x/2 for x in aaa], np.float)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: setting an array element with a sequence.
我可以使用哪种替代品? 我知道我可以为行和列写出2个循环,但这似乎很慢而不是pythonic。 提前谢谢。
答案 0 :(得分:0)
迭代多维矩阵迭代行而不是单元格。要迭代每个值,请迭代aaa.flat
。
请注意fromiter
(如文档所述)仅创建一维数组,这就是为什么必须迭代单元而不是行。如果你想创建一些其他形状的新矩阵,你将不得不重塑所得到的1d数组。
当然,在许多情况下,您根本不需要进行迭代。对于您的示例,您可以aaa/2
将矩阵的每个元素除以2。