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 ドット関数に np.dot としてアクセスできます。このようにすることで、名前空間が同じ名前の関数を定義している場合に、名前空間が互いに衝突するのを防ぐことができます。

ドット関数だけが必要な場合の別のオプションは、これを行うことです:

from numpy import dot

次に、ドット関数は、利用可能なnumpyの唯一の関数です。これらは、他のモジュールを使用するときに取られる 2 つの主なアプローチです。Import * は、異なるモジュールが互いに踏みつけたり、組み込み関数をオーバーライドしたりするかどうかがわからないため、一般的に嫌われています。

于 2012-07-23T23:48:06.920 に答える
4

それはまさに何が起こるかです。名前空間の競合を回避する 1 つの方法は、必要なものだけをインポートすることですfrom numpy import dot。もう 1 つの方法は、 or を実行し、orimport numpyimport numpy as np参照することです。dotnp.dot()numpy.dot()

于 2012-07-23T23:44:16.310 に答える