Numpy ndarray:多次元配列オブジェクト
9448 ワード
NumPyは現在python数値計算において最も重要な基礎パッケージであり、その核心的特徴の一つはN次元数グループオブジェクトであるndarrayであり、この博文では主にこの多次元同類データコンテナを紹介する.
文書ディレクトリ生成ndarray Numpy配列算術 インデックスとスライス 配列転置 ndarrayの生成
ndarrayに含まれる各要素は同じタイプです.配列を生成する関数はたくさんありますが、ここではいくつかのよく使われるものを紹介します. np.array()パラメータはシーケンス型オブジェクトで、入力データのデータ型を自動的に推定し、作成時に次元ndminと数値型dtypeを指定できます.
output: np.zeros()パラメータは、d 0,d 1,d 2,dnに関するメタグループであり、全0配列 を返す
output: np.ones()パラメータはd 0,d 1,d 2,dnに関するメタグループであり,全1配列 を返す.
output: np.Empty()パラメータは、d 0,d 1,d 2,dnに関するメタグループであり、初期化値のない空の配列 を返す
output: np.arang()内蔵関数rangeの配列版.パラメータは開始値、終了値(取得不可)、ステップ長
output: np.linspace().パラメータは、開始値、終了値(取り込み)、要素の数です.
output: np.logspace().上のnpと.linspace()類似
output:
8.np.eye()は、対角線が1、残りが0の2次元配列を返し、最初のパラメータはnumbers of rows、2番目のパラメータはnumbers of columnsで、デフォルトは最初のパラメータの値に等しい.
output:
次に、いくつかのndarrayのプロパティについて説明します.
output:
配列のデータ型をastype法を用いて変換することができ,この方法は常に新しい配列を生成することに注目すべきである.
output:
Numpy配列算術
2つの等寸法配列間の算術操作には、要素単位の操作が適用されます.
out:
索引とスライス一次元配列のインデックスとスライスはpythonリストの使い方と少し似ています
Out:
Out:
Out:
Out:2次元配列のインデックス、2次元配列の各インデックス値に対応する要素は1次元配列
Out:2次元配列のスライス
Out:
スライス式に値を割り当てると、スライス全体が再割り当てされます.
Out:3 D配列のインデックス
Out:ブール索引
Out:
Out:
Out:
はいれつてんい
Out:
Out:
transposeメソッドもswapaxesメソッドも配列をコピーしていません.データのビューを返します.元の配列は変わりません.
Out:
Out:
ndarray多次元配列オブジェクトについては、他にも興味深い知識点がたくさんあります.関連する本やチュートリアルを探して勉強し続けることができます.
文書ディレクトリ
ndarrayに含まれる各要素は同じタイプです.配列を生成する関数はたくさんありますが、ここではいくつかのよく使われるものを紹介します.
# NumPy
import NumPy as np
np.array("love")
output:
array('love', dtype='
np.zeros((2,3,4))
output:
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.]]])
np.ones((2,3,4))
output:
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.]]])
np.empty((2,1,3))
output:
array([[[0., 0., 0.]],
[[0., 0., 0.]]])
np.arange(2,15,3)
output:
array([ 2, 5, 8, 11, 14])
np.linspace(10,20,5)
np.linspace(0,1,10,endpoint=False)
output:
array([10. , 12.5, 15. , 17.5, 20. ])
array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
np.logspace(0,2,20)
output:
array([ 1. , 1.27427499, 1.62377674, 2.06913808,
2.6366509 , 3.35981829, 4.2813324 , 5.45559478,
6.95192796, 8.8586679 , 11.28837892, 14.38449888,
18.32980711, 23.35721469, 29.76351442, 37.92690191,
48.32930239, 61.58482111, 78.47599704, 100. ])
8.np.eye()は、対角線が1、残りが0の2次元配列を返し、最初のパラメータはnumbers of rows、2番目のパラメータはnumbers of columnsで、デフォルトは最初のパラメータの値に等しい.
np.eye(5)
output:
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
次に、いくつかのndarrayのプロパティについて説明します.
# ,(0,1)
data = np.random.randn(2,3)
data
#
data.shape
#
data.dtype
#
data.ndim
output:
array([[ 0.71552267, 1.12464515, 0.84971133],
[-0.43746949, 1.12846303, -0.29032458]])
(2, 3)
dtype('float64')
2
配列のデータ型をastype法を用いて変換することができ,この方法は常に新しい配列を生成することに注目すべきである.
data.astype(np.int32)
data
output:
array([[0, 1, 0],
[0, 1, 0]])
array([[ 0.71552267, 1.12464515, 0.84971133],
[-0.43746949, 1.12846303, -0.29032458]])
Numpy配列算術
2つの等寸法配列間の算術操作には、要素単位の操作が適用されます.
arr = np.array([[1,2,3],[4,5,6]])
arr * arr
arr - arr
1/arr
arr * 0.5
# ,
arr2 = np.array([[2,4,6],[1,2,3]])
arr2 > arr
out:
array([[ 1, 4, 9],
[16, 25, 36]])
array([[0, 0, 0],
[0, 0, 0]])
array([[1. , 0.5 , 0.33333333],
[0.25 , 0.2 , 0.16666667]])
array([[0.5, 1. , 1.5],
[2. , 2.5, 3. ]])
array([[ True, True, True],
[False, False, False]])
索引とスライス
#
arr = np.arange(10)
arr
Out:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# , , ,
arr[5:8]=12
arr
Out:
array([ 0, 1, 2, 3, 4, 12, 12, 12, 8, 9])
# aar1 ,
arr1 = arr[5:8]
arr1
arr1[:] = 24
arr
Out:
array([12, 12, 12])
array([ 0, 1, 2, 3, 4, 24, 24, 24, 8, 9])
# .copy()
arr11 = arr[5:8].copy()
arr11
arr11[:] = 48# aar11 ,
arr
Out:
array([24, 24, 24])
array([ 0, 1, 2, 3, 4, 24, 24, 24, 8, 9])
#
arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]])
#
arr2d[2]
# ,
arr2d[2][0]
# ,
arr2d[2,0]
#
arr2d[[2,0]]
Out:
array([7, 8, 9])
7
7
array([[7, 8, 9],
[1, 2, 3]])
#
arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]])
#
arr2d[:2]
#
arr2d[:2,1:]
Out:
array([[1, 2, 3],
[4, 5, 6]])
array([[2, 3],
[5, 6]])
スライス式に値を割り当てると、スライス全体が再割り当てされます.
arr2d[:2,1:] = 0
arr2d
Out:
array([[1, 0, 0],
[4, 0, 0],
[7, 8, 9]])
# ,2*2*3
arr3d = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
arr3d[0]
arr3d[0,0]
arr3d[0][0]
Out:
array([[1, 2, 3],
[4, 5, 6]])
array([1, 2, 3])
array([1, 2, 3])
# names
names = np.array(["aa","bb","aa","dd","ee","aa","gg"])
# randn data
data = np.random.randn(7,4)
names
data
names == "aa"
#
data[names == "aa"]
Out:
array(['aa', 'bb', 'aa', 'dd', 'ee', 'aa', 'gg'], dtype='
# != ~
data[names != "aa"]
data[~(names == "aa")]
cond = names == "aa"
data[~cond]
Out:
array([[-0.18299815, -0.48641017, 0.90295139, 2.4727419 ],
[ 0.71607019, 1.63065359, -0.71081597, -2.88685402],
[ 0.59853369, 0.03907715, -0.21053569, 0.18792567],
[ 0.68262773, 0.61233984, -1.23746087, -0.50847237]])
array([[-0.18299815, -0.48641017, 0.90295139, 2.4727419 ],
[ 0.71607019, 1.63065359, -0.71081597, -2.88685402],
[ 0.59853369, 0.03907715, -0.21053569, 0.18792567],
[ 0.68262773, 0.61233984, -1.23746087, -0.50847237]])
array([[-0.18299815, -0.48641017, 0.90295139, 2.4727419 ],
[ 0.71607019, 1.63065359, -0.71081597, -2.88685402],
[ 0.59853369, 0.03907715, -0.21053569, 0.18792567],
[ 0.68262773, 0.61233984, -1.23746087, -0.50847237]])
# , | &
mask = (names == "aa")|(names == "bb")
mask
data[mask]
# ,
Out:
array([ True, True, True, False, False, True, False])
array([[ 0.7416918 , 0.88800978, 0.68197079, -0.53014663],
[-0.18299815, -0.48641017, 0.90295139, 2.4727419 ],
[-0.52766455, -0.36830999, 0.45128251, 0.48811192],
[-0.1643565 , 0.97845669, -0.92076973, -1.29995933]])
はいれつてんい
#
arr = np.arange(15).reshape((3,5))
arr
arr.T
Out:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
array([[ 0, 5, 10],
[ 1, 6, 11],
[ 2, 7, 12],
[ 3, 8, 13],
[ 4, 9, 14]])
arr = np.random.randn(6,3)
arr
np.dot(arr.T,arr)#
Out:
array([[ 0.58847723, 0.84348489, 1.42054432],
[ 0.95521876, -1.13381903, -0.60993457],
[-0.19601102, 0.40465638, -1.04277897],
[-0.03255321, 0.40138796, 0.27147854],
[-0.55308299, -0.57412833, -0.8741011 ],
[ 0.51149413, -0.12046626, 0.41461565]])
array([[ 1.86575541, -0.42313431, 1.14441965],
[-0.42313431, 2.66600688, 2.02866315],
[ 1.14441965, 2.02866315, 4.48701381]])
transposeメソッドもswapaxesメソッドも配列をコピーしていません.データのビューを返します.元の配列は変わりません.
#transpose , , ,
arr = np.arange(16).reshape((2,2,4))
arr
arr.transpose((1,0,2))
arr
Out:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
array([[[ 0, 1, 2, 3],
[ 8, 9, 10, 11]],
[[ 4, 5, 6, 7],
[12, 13, 14, 15]]])
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
#swapaxes ,
arr
arr.swapaxes(1,2)
arr
Out:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
array([[[ 0, 4],
[ 1, 5],
[ 2, 6],
[ 3, 7]],
[[ 8, 12],
[ 9, 13],
[10, 14],
[11, 15]]])
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
ndarray多次元配列オブジェクトについては、他にも興味深い知識点がたくさんあります.関連する本やチュートリアルを探して勉強し続けることができます.