1

如果我想在整个矩阵上应用一个函数,为什么 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 个循环,但这似乎很慢而且不是 Python 的。提前致谢。

4

1 回答 1

0

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

请注意fromiter(如文档所述)仅创建一维数组,这就是为什么您必须遍历单元格而不是行的原因。如果要创建其他形状的新矩阵,则必须重塑生成的一维数组。

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

于 2013-07-10T22:40:58.247 回答