0

我有一个矩阵列表如下:

myarrlist = [array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), array([[10, 20, 30],40, 50, 60],[70, 80, 90]])]

和,

sum(myarrlist)/float(len(myarrlist))

给了我以下结果(这是我需要的:矩阵加法的结果是一个矩阵)

array([[  5.5,  11. ,  16.5],[ 22. ,  27.5,  33. ],[ 38.5,  44. ,  49.5]])

但是,当我给

from numpy import *

对于使用 dot() 函数进行矩阵乘法,sum() 函数不再给出矩阵作为结果,而是给出单个值(添加所有元素)。我是 python 新手,我猜测 numpy 中的 sum() 会覆盖对 python 内置 sum() 的调用。

我正在尝试在没有循环的列表中添加矩阵并找到适合的内置 sum() 。是否可以使用 python sum() 并仍然使用 numpy 的其他功能?

4

2 回答 2

5

当你这样做

from SomeModule import *

你确实覆盖了内置的 sum 函数。这会将 numpy 命名空间中的所有内容导入到默认命名空间中。您可能想要做的是:

import numpy as np

然后,您可以将 numpy dot 函数作为 np.dot 访问。通过这样做,如果命名空间定义了同名的函数,则可以防止命名空间相互踩踏。

另一种选择,如果你只想要点函数是这样做的:

from numpy import dot

那么 dot 函数是 numpy 中唯一可用的函数。这是使用其他模块时采用的两种主要方法。Import * 通常不受欢迎,因为永远不知道不同的模块是否会相互踩踏或覆盖内置函数。

于 2012-07-23T23:48:06.920 回答
4

这正是发生的事情。避免命名空间冲突的一种方法是仅导入您需要的内容:from numpy import dot例如。另一种方法是做import numpyor import numpy as np,并dot称为np.dot()ornumpy.dot()

于 2012-07-23T23:44:16.310 回答