2つのnd配列aとbを追加するときにnumpy.add(a,b)
とa+b
に違いはありますか? 文書にはnumpy.add
が"Equivalent to x1 + x2 in terms of array broadcasting."と記載されています。 しかし、私はこの意味を理解していません。numpy.add(numpy.array([1,2,3]),4)
も働いています。「numpy.add(a、b)」と「a + b」の違いは何ですか?
答えて
はa.__add__(b)
に変換されます。 a.__add__
は、タイプa
のオブジェクトの追加を実装するメソッドです。数値にはこのようなメソッドがあり、リストも同様に([1,3]+[4]
)、文字列('abc'+'d'
)もあります。
numpy
は、(少なくとも数値dtypes
ため)そのndarray
クラス__add__
(および他の標準__...
方法)を実施しています。
これはすべて標準のPythonで、numpy
です。
np.add
はufunc
です。そのドキュメントを見てください。out
パラメータとBinary ufuncs:
セクションを参照してください。関数なので、reduceat
などa.__add__
(および+
)のようなメソッドはありません。
2つの配列または数値があり、合計したい場合、自然なことは+
,a+b
です。 np.add
が
は、比較、いくつかの特別な場合に便利です、例えば、どのような2つのリストに何が起こる:
In [16]: [1,2,3]+[4]
Out[16]: [1, 2, 3, 4] # default list concatenation
In [17]: np.add([1,2,3],[4])
Out[17]: array([5, 6, 7]) # convert lists to arrays and sum
または2D放送を使った例:
In [19]: np.add([[1],[2],[3]],[4,1])
Out[19]:
array([[5, 2],
[6, 3],
[7, 4]])
In [20]: np.array([1,2,3])[:,None]+np.array([4,1])
Out[20]:
array([[5, 2],
[6, 3],
[7, 4]])
そして、あなたの例:
In [21]: numpy.add(numpy.array([1,2,3]),4)
Out[21]: array([5, 6, 7])
In [22]: numpy.array([1,2,3])+4
Out[22]: array([5, 6, 7])
"アレイ放送に関してx1 + x2と同等です。"つまり、彼らは働き、同じことをします。
broadcasting
が別の件名です。
==================は@
オペレータとnp.matmul
パラレルは全く同じではありません。 @
オペレータは、最近のPythonインタープリタに追加されたものです。定義されている場合は__matmul__
メソッドへの呼び出しに変換されます。新しいnumpy
バージョンにはそのような定義があります。しかし、このメソッドはPythonの数値やリストには定義されていません。同じコードを参照する関数バージョンnp.matmul
もあります。 x.dot
とnp.dot
の組み合わせもありますが、Pythonで認識される演算子はありません。x.__dot__
です。
私はadd()
はまず、ライブラリは通常の算術演算子を改善し、得られたと信じています。
ところで、私たちは、行列の乗算は、オペレータ@
で行うことができるのPython 3.5とnumpyの、と今同じことを目撃。これに先立って、配列の配列マルチは、配列のdot()
メソッドによってのみ実行できます。
放送は、配列全体に番号を追加するなど、サイズの異なる配列間で操作を実行できることを意味します。これは配列の演算子でも機能します。
数字を配列に追加することは、放送能力のごくわずかな例です。あなたはそれについてもっと読むことができますBroadcasting これはメモリとコーディングを節約する非常にクールな機能ですが、最初の読書では分かりにくいです。 Pythonの構文、a+b
で
- 1. double a = a + int bとint a + = double bの違いは何ですか?
- 2. bashの$ [a-b]と$((a-b))の違い
- 3. [:] = bとa = b [:]の違いは何ですか?
- 4. '(a b c)と(a' b 'cをリストする)の違いは何ですか?
- 5. Rのsetequal(a、b)とsame(a、b)の違いは何ですか?
- 6. [(a、b)、(c、d)]と[[a、b]、[c、d]]の違いは何ですか?
- 7. x = function(a、b、c){}と関数x(a、b、c){}の違いは何ですか?
- 8. AジョインB対BジョインAの違い
- 9. [:] = bとa = b [:]の違いは? (Python)
- 10. a + bと.__ addの違い__(b)
- 11. プログラミングでKleeneの星。 (a | b)*とa * b *の違い?
- 12. ハスケル: `Map(a、b)c`と` Map a(Map b c) `の違いは?
- 13. ["a"、 "b"、 "c"]の "a、b、c" .split( "、")のメリットは何ですか?
- 14. をf(a、b)= a * b + a * bと定義すると、なぜa * b?
- 15. if(a-b <0)とif(a <b)の違い
- 16. a + bはb + aと等しくないのですか?
- 17. (aと(bではない))または(aとb)= aはなぜですか?
- 18. スペース "a> b"とスペース "a> b"のないCSS子セレクタの違いは何ですか?
- 19. sort()、sort(function(a、b){return a-b;})の違い。
- 20. SUM(a * b)とは何ですか?
- 21. Prolog - バックトラックで交互にシンボルを生成する:[a]; [a、b]; [a、b、a]; [a、b、a、b]
- 22. タイプパターンの名前:R a b = Q(a - >(R a b、b))
- 23. a.compareTo(b)がcompareTo(a、b)またはa.method(b)= method(a、b)と等しいのはなぜですか?
- 24. Functorは(a - > b) - >(f a - > f b)であり、(cカテゴリ)=> c a b - > c(f a)(f b)とは何か?
- 25. {a-b、b-c、c-a}から{(a、b)、(b、c)、(c、a)}に変更しますか?
- 26. コピー/ aとコピー/ bの違い
- 27. a = b + aのショートカット。
- 28. 正規表現の違いb/w [ab]と(a | b)?
- 29. ネームスペースA - floder A /サブフォルダB-サブネームスペースB?
- 30. list a =リストb vsリストa =リストb [:]
詳細な回答ありがとうございました。 もし私がこの権利を持っていれば、numpy.addはufuncなので+ bよりも速いです(もしaとbがndarrayであることが保証されていれば)。 – Manu
1つがufuncであり、もう1つのメソッドが速度を変えるべきでないという事実。これはユーザーインターフェイスの問題であり、スピードの問題ではありません。 add(add.reduceatのように)の追加機能が必要でない限り、私は '+'を使います。 – hpaulj