将fromiter应用于矩阵

时间:2013-07-10 22:39:19

标签: python numpy matrix iteration

如果我想在整个矩阵上应用函数,为什么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。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

迭代多维矩阵迭代行而不是单元格。要迭代每个值,请迭代aaa.flat

请注意fromiter(如文档所述)仅创建一维数组,这就是为什么必须迭代单元而不是行。如果你想创建一些其他形状的新矩阵,你将不得不重塑所得到的1d数组。

当然,在许多情况下,您根本不需要进行迭代。对于您的示例,您可以aaa/2将矩阵的每个元素除以2。