np.arrayの使い方#
np.arrayの作り方#
import numpy as np
def object_checker(obj):
print("型:",type(obj))
print("中身:",obj)
if type(obj) == np.ndarray:
print("行列のshape:",obj.shape)
list1 = [1,2,3]
object_checker(list1)
型: <class 'list'>
中身: [1, 2, 3]
arr1 = np.array(list1)
object_checker(arr1)
型: <class 'numpy.ndarray'>
中身: [1 2 3]
行列のshape: (3,)
list2 = [[1,2,3], [4,5,6]]
arr2 = np.array(list2)
object_checker(arr2)
型: <class 'numpy.ndarray'>
中身: [[1 2 3]
[4 5 6]]
行列のshape: (2, 3)
numpy関数によるnp.arrayの初期化#
numpyはPythonに配列(np.array)を提供します。
このnp.arrayはリストやtupleを元に作るだけでなく、np.zeros、np.onesなどの関数からも作ることができます。
① np.zerosを使って要素数10の配列を作ってください。
np.zeros(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
② np.onesを使ってshape (10,5)の行列を作ってください。
np.ones((10,5))
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
③ np.arangeを使って0~9までの値を持ったベクトルを作ってください。
hint: np.arangeはrangeとほぼ同様の動作をします。
np.arange(3,10,2)
array([3, 5, 7, 9])
np.arrayのshapeの変更#
np.arrayはデータを効率的に扱うために、numpyの関数だけで配列の形を変形する事ができます。
もっとも代表的な方法として、np.reshapeがあります。
arr3 = np.arange(20)
arr4 = np.reshape(arr3, (10,-1)) # arr3.reshape((10,2))でも可
print(
"オリジナル:\n",arr3,
"\nreshape後:\n",arr4
)
オリジナル:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
reshape後:
[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]
[ 8 9]
[10 11]
[12 13]
[14 15]
[16 17]
[18 19]]
④ ゼロで初期化した要素数30の配列を、5x2x3の三階テンソルに変換してください。
arr3 = np.zeros(30)
arr4 = np.reshape(arr3, (5,2,-1))
arr4.shape
(5, 2, 3)
行列の転置#
arr5 = arr4.T
arr5
array([[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]]])
np.arrayの演算#
numpy.arrayは高速な行列演算が可能です。
また、計算の結果は尤もらしい型になります。
arr1の要素はint32ですが、1.0などのfloat64と演算する事で、計算結果result1がfloat64として出力されます。
加算#
result1 = arr1 +1.0
result1
array([2., 3., 4.])
print("arr1.dtype:",arr1.dtype)
print("result1.dtype:", result1.dtype)
arr1.dtype: int64
result1.dtype: float64
減算#
result2 = result1 - 5.0
result2
array([-3., -2., -1.])
乗算#
result3 = result2 * 1.5
result3
array([-4.5, -3. , -1.5])
除算#
result4 = result3 / 3.0
result4
array([-1.5, -1. , -0.5])
剰余#
result5 = result4 % 2
result5
array([0.5, 1. , 1.5])
等式#
result6 = result5 ==1
result6
array([False, True, False])
不等式#
result7 = result5 !=1
result7
array([ True, False, True])
result8 = result5 >=1
result8
array([False, True, True])
result8 = result5 <1
result8
array([ True, False, False])
要素が含まれているか確認する#
1 in result5
True
2 in result5
False
1 not in result5
False
2 not in result5
True
⑤ 以下の1~5までの処理をして答えを返す関数を作成して、実行してください。
1~20までの要素を持ったベクトルを用意
ベクトルをreshapeし2x10行列に変換
配列の各要素を20倍
配列の各要素のmod 3をとる
配列の0をTrue、それ以外をFalseに変換
5の答えをreturn