Python入門から応用までの学習サイト


ndarrayにおける演算子

ndarrayクラスは演算子がオーバーロードされているため、「+」や「-」を用いての演算は独自の挙動を示します。

ndarrayの要素は数値である必要があり、文字列などではエラーが発生します。

# -*- coding: utf-8 -*-

import numpy


# 文字列はエラー
print numpy.array(['AB']) + numpy.array(['CD'])



ndarray同士の比較は、それぞれの結果を格納したndarrayが返されます。次の例の場合「1」と「2」の比較結果として「False」、「10」と「20」で「False」、「100」と「100」で「True」となります。

# -*- coding: utf-8 -*-

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です。

# -*- coding: utf-8 -*-

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が返ります。

# -*- coding: utf-8 -*-

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のallanyを使うと良いでしょう。

# -*- coding: utf-8 -*-

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」となります。

# -*- coding: utf-8 -*-

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です。

# -*- coding: utf-8 -*-

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が返ります。

# -*- coding: utf-8 -*-

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]


累算代入もサポートしています。

# -*- coding: utf-8 -*-

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)

na_1 += na_2
print na_1

na_1 -= na_2
print na_1

na_1 *= na_2
print na_1

na_1 /= na_2
print na_1

na_1 //= na_2
print na_1

na_1 %= na_2
print na_1

na_1 <<= na_2
print na_1

na_1 >>= na_2
print na_1

na_1 &= na_2
print na_1

na_1 |= na_2
print na_1

na_1 ^= na_2
print na_1

--実行結果--

[  3  30 200]
[  1  10 100]
[    2   200 10000]
[  1  10 100]
[0 0 1]
[0 0 1]
[ 0  0 16]
[0 0 1]
[0 0 0]
[  2  20 100]
[0 0 0]



単項演算子は以下の通りです。

# -*- coding: utf-8 -*-

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]
[  1  10 100]




Pythonによるデータ分析入門
NumPy、pandasを
使ったデータ処理


ゼロから作るDeep Learning
Pythonで学ぶディープラーニング
の理論と実装


科学技術計算のための
Python入門


Pythonから
はじめる数学入門

 
 
 

既存配列の複製を作る!

▶数値解析:ndarrayの複製



確かな力が身につく
Python「超」入門




P  R