ndarrayクラスは演算子がオーバーロードされているため、「 + 」や「 – 」を用いての演算は独自の挙動を示します。
前提条件
ndarrayの要素は数値である必要があり、文字列などではエラーが発生します。
import numpy # 文字列はエラー print(numpy.array(['AB']) + numpy.array(['CD']))
比較演算子
ndarray同士の比較は、それぞれの結果を格納したndarrayが返されます。次の例の場合1と2の比較結果としてFalse、10と20でFalse、100と100でTrueとなります。
import numpy array_like_1 = [1, 10, 100] array_like_2 = [2, 20, 100] na_1 = numpy.array(array_like_1) na_2 = numpy.array(array_like_2) result = na_1 == na_2 print(type(result)) print(result)
<type 'numpy.ndarray'> [False False True]
またndarrayとPython標準のシーケンスとの比較も可能です。戻り値はndarrayです。
import numpy array_like_1 = [1, 10, 100] array_like_2 = [2, 20, 100] na_1 = numpy.array(array_like_1) na_2 = numpy.array(array_like_2) print(na_1 == array_like_1) print(na_1 == array_like_2)
[ True True True] [False False True]
「 == 」以外の比較結果は以下の通りです。それぞれに格納されている数値の比較を行い、その結果が格納されたndarrayが返ります。
import numpy array_like_1 = [1, 10, 100] array_like_2 = [2, 20, 100] na_1 = numpy.array(array_like_1) na_2 = numpy.array(array_like_2) print(na_1 != na_2) print(na_1 < na_2) print(na_1 <= na_2) print(na_1 > na_2) print(na_1 >= na_2)
[ True True False] [ True True False] [ True True True] [False False False] [False False True]
これらの結果をまとめて判定したい場合は、Numpyのallやanyを使うと良いでしょう。
import numpy array_like_1 = [1, 10, 100] array_like_2 = [2, 20, 100] na_1 = numpy.array(array_like_1) na_2 = numpy.array(array_like_2) if numpy.all(na_1 == na_2): print('all') else: print('not all')
not all
算術演算子
ndarray同士で「 + 」や「 – 」を用いた場合、それぞれの計算結果を格納したndarrayが返されます。次の例の場合1と2の計算結果として3、10と20で30、100と100で200となります。
import numpy array_like_1 = [1, 10, 100] array_like_2 = [2, 20, 100] na_1 = numpy.array(array_like_1) na_2 = numpy.array(array_like_2) print(na_1 + na_2)
[ 3 30 200]
比較と同様に、ndarrayとPython標準のシーケンスとの計算も可能です。戻り値はndarrayです。
import numpy array_like_1 = [1, 10, 100] array_like_2 = [2, 20, 100] na_1 = numpy.array(array_like_1) na_2 = numpy.array(array_like_2) print(na_1 + array_like_1) print(na_1 + array_like_2)
[ 2 20 200] [ 3 30 200]
「 + 」以外の計算結果は以下の通りです。それぞれに格納されている数値の計算を行い、その結果が格納されたndarrayが返ります。
import numpy array_like_1 = [1, 10, 100] array_like_2 = [2, 20, 100] na_1 = numpy.array(array_like_1) na_2 = numpy.array(array_like_2) print(na_2 - na_1) print(na_2 * na_1) print(na_2 / na_1) print(na_2 // na_1) print(na_2 % na_1) print(na_2 << na_1) print(na_2 >> na_1) print(na_2 & na_1) print(na_2 | na_1) print(na_2 ^ na_1)
[ 1 10 0] [ 2 200 10000] [2 2 1] [2 2 1] [0 0 0] [ 4 20480 1600] [1 0 6] [ 0 0 100] [ 3 30 100] [ 3 30 0]
累算代入もサポートしています。
import numpy array_like_1 = [1, 10, 100] array_like_2 = [2, 20, 100] na_2 = numpy.array(array_like_2) na_1 = numpy.array(array_like_1) na_1 += na_2 print(na_1) na_1 = numpy.array(array_like_1) na_1 -= na_2 print(na_1) na_1 = numpy.array(array_like_1) na_1 *= na_2 print(na_1) na_1 = numpy.array(array_like_1) na_1 //= na_2 print(na_1) na_1 = numpy.array(array_like_1) na_1 %= na_2 print(na_1) na_1 = numpy.array(array_like_1) na_1 <<= na_2 print(na_1) na_1 = numpy.array(array_like_1) na_1 >>= na_2 print(na_1) na_1 = numpy.array(array_like_1) na_1 &= na_2 print(na_1) na_1 = numpy.array(array_like_1) na_1 |= na_2 print(na_1) na_1 = numpy.array(array_like_1) na_1 ^= na_2 print(na_1)
[ 3 30 200] [ -1 -10 0] [ 2 200 10000] [0 0 1] [ 1 10 0] [ 4 10485760 1600] [0 0 6] [ 0 0 100] [ 3 30 100] [ 3 30 0]
単項演算子
単項演算子は以下の通りです。
import numpy array_like_1 = [1, 10, 100] array_like_2 = [-2, -20, -100] na_1 = numpy.array(array_like_1) na_2 = numpy.array(array_like_2) print(+na_1) print(-na_1) print(-na_2) print(~na_2)
[ 1 10 100] [ -1 -10 -100] [ 2 20 100] [ 1 19 99]