Python 在矩阵上应用fromiter
如果我想在整个矩阵上应用函数,为什么fromiter会失败Python 在矩阵上应用fromiter,python,numpy,matrix,iteration,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]
>>> 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.
aaa=np.矩阵([[2,2],[1,23]]
>>>aaa
矩阵([[2,2],
[ 1, 23]])
>>>np.fromiter([x/2代表aaa中的x],np.float)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:使用序列设置数组元素。
我可以用什么替代品?
我知道我可以为行和列编写两个循环,但这似乎很慢,而且不符合Python。
提前感谢。对多维矩阵的迭代是对行的迭代,而不是对单元格的迭代。要迭代每个值,请迭代
aaa.flat
请注意,fromiter
(如文档所述)只创建一维数组,这就是为什么必须迭代单元格而不是行。如果要创建其他形状的新矩阵,则必须重塑生成的一维阵列
当然,在许多情况下,您根本不需要迭代。例如,你可以用
aaa/2
将矩阵的每个元素除以2。谢谢Bern,这确实有效,但我希望得到的结果是一个与原始矩阵尺寸相同的矩阵?@adi:aaa/2
解决方案可以做到这一点。再次感谢,是的,aaa/2是可能的(我的实际代码更复杂,这只是一个示例)@adi:如果你有一个更复杂的函数,可以考虑使用np.frompyfunc
从你的函数中生成一个ufunc
。如果你在一个numpy对象上调用它,ufunc将被应用到元素上。如果你决定沿着np.fromiter
路线,至少让你的迭代器成为一个生成器表达式,而不是一个列表在…上