NumPyで「1次元配列」をやってみた。
Numpy は Pythonでベクトルや行列計算を行うために特化した、科学技術計算に便利なライブラリ。
Numpyで配列を高速に処理するために ndarray (N-d Array = N次元配列) があり、ndarrayを生成するためには、np.array()関数の引数にPythonリスト型のオブジェクトを渡してあげれば良い。
import numpy as np
# 1次元配列 ベクトル
array_1 = np.array([1,2,3,4,5,6,7,8])
# 2次元配列 行列
array_2 = np.array([[1,2,3,4],[5,6,7,8]])
# 3次元配列 テンソル
array_3 = np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
storages = [9, 15, 7, 21, 15, 22, 44]
np_storages = np.array(storages)
print(type(np_storages))
#実行結果
<class 'numpy.ndarray'>
1次元配列の計算 (Numpyを使わずに)
### Numpryを使わずにndarrayの要素同士を=+する
# (1) 間違った例
list = [1,2,3,4]
list += list
print("間違った例: " + str(list))
# [1, 2, 3, 4, 1, 2, 3, 4]
# ↑ これでは 要素が足されるだけ
# (2) 正しい例 (Loopで書く例)
list = [1,2,3,4]
list_new = []
for n in list:
n += n
list_new.append(n)
print("正しい例: " + str(list_new))
# 実行結果
間違った例: [1, 2, 3, 4, 1, 2, 3, 4]
正しい例: [2, 4, 6, 8]
1次元配列の計算(Numpyを使うと簡単!)
import numpy as np
list_array = np.array(list)
list_array += list_array
print(list_array)
#実行結果
[2 4 6 8]
minus = list_array - list_array
print(minus)
multipy = list_array * list_array
print(multipy)
cubed = list_array ** 3
print(cubed)
division = 1 / list_array
print(division)
# 実行結果
[0 0 0 0]
[ 4 16 36 64]
[ 8 64 216 512]
[0.5 0.25 0.16666667 0.125 ]
ndarrayの注意点
・リストと同じように、代入したあとに変更すると元の配列も影響される。
copyを使えば元の配列に影響はない
arr1 = np.array([1,2,3,4,5])
arr2 = arr1
print(arr1)
arr2[0] = 100
print(arr1)
# 実行結果
[1 2 3 4 5]
[100 2 3 4 5]
# copyを使えば元の配列に影響はない
arr1 = np.array([1,2,3,4,5])
print(arr1)
arr3 = arr1.copy()
arr3[0] = 100
print(arr1)
# 実行結果
[1 2 3 4 5]
[1 2 3 4 5]
・スライスでは、代入したあとに変更すると元の配列も影響される。
(リストは、スライスで複製した場合でも、元の配列は影響されない)
--> copyを使えば元の配列に影響はない
arr_Numpy = np.arange(10)
print("arr_Numpy:", arr_Numpy)
print()
arr_Numpy_view = arr_Numpy[:]
arr_Numpy_view[0] = 100
print("Numpyのスライスでは view(データが格納されている場所の情報)が代入されるので arr_Numpy_viewの変更がarr_Numpyに変更される")
print(arr_Numpy)
# 実行結果
arr_Numpy: [0 1 2 3 4 5 6 7 8 9]
Numpyのスライスでは view(データが格納されている場所の情報)が代入されるので arr_Numpy_viewの変更がarr_Numpyに変更される
[100 1 2 3 4 5 6 7 8 9]
arr_Numpy = np.arange(10)
print("arr_Numpy:", arr_Numpy)
print()
arr_Numpy_view = arr_Numpy[:].copy()
arr_Numpy_view[0] = 100
print("Numpyのスライスで copy を使った場合は コピーが生成されているので、arr_Numpy_copyはarr_Numpuyに影響しない")
print(arr_Numpy)
# 実行結果
arr_Numpy: [0 1 2 3 4 5 6 7 8 9]
Numpyのスライスで copy を使った場合は コピーが生成されているので、arr_Numpy_copyはarr_Numpuyに影響しない
[0 1 2 3 4 5 6 7 8 9]
いいなと思ったら応援しよう!
今回の"note"を気に入って頂けましたら、是非サポートをお願いいたします!