Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在矩阵上应用fromiter_Python_Numpy_Matrix_Iteration - Fatal编程技术网

Python 在矩阵上应用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]

如果我想在整个矩阵上应用函数,为什么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.
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
路线,至少让你的迭代器成为一个生成器表达式,而不是一个列表在…上