Numpyの知識
Numpyはデータサイエンス計算の基盤であり、科学計算タスクだけでなく、多次元データの効率的なコンテナとしても使用できます。大きな行列の保存と処理に使われます。
Pythonには配列モジュールがあり、リストと違って値を直接保持しますが、Pythonの配列モジュールは多次元をサポートしておらず、様々な算術関数も持っていないため、大きな行列を保存したり操作したりするのに便利なツールではありません。
Numpyは配列オブジェクトndarray(以下、配列)を提供することでこれを補います。
ndarray配列オブジェクトの認識について:
ndarrayはメモリに連続したオブジェクトで、単一のデータ型を格納し、多次元配列を格納することができます。
2種類のストレージが存在します:
C式ストレージ ---- 行順ストレージ
F式ストレージ - 列優先ストレージ
配列の作成
1, Numpy.array関数による一次元または多次元配列の作成
numpy.array
一次元または多次元の配列を作成する配列関数 numpy.array | 配列を受け取り、配列を作成します。 |
dtype | 配列に必要なデータの型を示すdata-typeを受け取ります。指定されない場合、オブジェクトを保存するために必要な最小の型を選択します。デフォルトは None |
ndmin | int を受け取り、結果の配列が持つべき最小の次元数を指定します。 |
配列のプロパティ
Ndarray は配列オブジェクトで、以下のプロパティを持ちます:
ndim | 配列の次元数を int で返します。 |
shape | 配列の次元を表すタプルを返します。n 行 m 列の行列の場合、shape は |
size | 配列の要素の総数を int で返します。 |
dtype | 配列の要素の型を表す data 型を返します。 |
itemsize | 配列の各要素のサイズを int で返します。 |
コードの実装
#
import numpy as np
# 配列の作成
# 配列はnp.hsplit、np.vsplit、np.splitを使って分割できる。.arrayリストオブジェクトをndarray配列に変換する
# arr = np.array([1, 2, 3, 4])
# print('arr:
', arr) # [1 2 3 4]
# print('arr 型:
', type(arr)) # <class 'numpy.ndarray'>
#
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 0]])
print('arr:
', arr)
# [[1 2 3 4]
# [5 6 7 8]]
print('arr 型:
', type(arr)) # <class 'numpy.ndarray'>
print('*' * 100)
# arr = np.array([[[1, 2, 3, 4], [5, 6, 7, 0]],[[1, 2, 3, 4], [5, 6, 7, 0]]])
# print('arr:
', arr)
# # [[1 2 3 4]
# # [5 6 7 8]]
#
# print('arr 型:
', type(arr)) # <class 'numpy.ndarray'>
# # print('*' * 100)
# 配列オブジェクトのプロパティを調べる
# ndim shape size dtype itemsize
print('arr のndimプロパティは、', arr.ndim) # 配列の次元
print('arr 配列のshape属性は', arr.shape) # 配列の形状、タプル型
print('arr np.hsplitのsize属性: ', arr.size) # 配列の要素数
# print('arr  dtype 属性: ', arr.dtype) # 配列の要素のデータ型は int32 --- である。>numpyのデータ型は>32ビットプラットフォーム用のint型
# print('arr np.hsplitのitemsizeプロパティは', arr.itemsize) # 各要素のサイズはバイト単位である。
# ndim shape size
# len(shape) = ndim
# size = shape配列の要素の積は
データ要素の型
実ビジネスのデータ処理では、結果をより正確に計算するために、異なるデータ型を使用する必要がありますが、Numpyはpythonネイティブのデータ型を大幅に拡張しました。そのほとんどは、メモリのビット数を示す数字で終わっています。この利点は、配列に必要な記憶領域を簡単に決定できることです。
次の表に示すように
bool | 1ビットで格納されるブール型 |
inti | 精度が格納されるプラットフォームによって決定される整数。 |
int8 | 128から721の範囲の整数 |
int16 | 32768から72367の範囲の整数 |
配列の要素型を使用する場合は、配列を作成する際に dtype パラメータを使用して配列の要素型を指定することができます。たとえば、すべて 0 とすべて 1 の配列を作成する場合は、dtype パラメータを使用します。
実際、numpyのデータ型は、強制的に変換することもできますが、次のような複合データを格納することもできます:
import numpy as np
# numpy配列のデータ型は
# ---Pythonのデータ型は慎重に分割してカプセル化する ----。>numpyに変更した。.データ型
# np.int32 np.int64 np.float32 np.float64 .......
# (1) dtypeパラメータで作成したい配列の型を指定できる。
arr = np.array([1, 2, 3, 4], dtype=np.float64)
print('arr:
', arr)
print('arr 型:
', type(arr))
print('arr 配列の要素の型は
', arr.dtype)
arr = np.array([1, 2, 3, 4], dtype=np.int64)
print('arr:
', arr)
print('arr 型:
', type(arr))
print('arr 配列の要素の型は
', arr.dtype)
# bool配列の作成
# 注意:0は偽、0以外は真を意味する。
arr = np.array([1, 2, 3, 0], dtype=np.bool)
print('arr:
', arr) # [ True True True False]
print('arr 型:
', type(arr))
print('arr 配列の要素の型は
', arr.dtype)
# (2) データの強力な変換も可能である
print('値をbool型に変換する: ',np.bool(1))
print('整数データを浮動小数点数に変換する。,np.float32(3))
# print('文字列aを浮動小数点数に変換する: ',np.float64('a')) #
print('文字列10をfloat型に変換する: ',np.float64('10'))
# # (3)ndarrayは異なる型のデータを格納できる。>変換 - オブジェクト型
# # ストレージ --- 個人情報 --- 名前 身長 体重
# # これはカスタムdtype
df = np.dtype([('name', np.str, 20), ('hight', np.float64), ('weight', np.float32)])
#
# # dfを使用して配列を作成する
info = np.array([('bq', 168.0, 65.0), ('nl', 178.0, 70.0), ('yf', 173.0, 63.0)], dtype=df)
print('info:
', info)
print('info :
', info.ndim)
print('info 形状:
', info.shape)
print('info :
', info.dtype) # [('name', '<U20'), ('hight', '<f8'), ('weight', '<f4')]
#
# #
print('info 各要素のサイズ: ', info.itemsize) # 92
# # データオブジェクトが配列情報として使われるようになった ---。>十分なスペースを確保する
# ndarray 配列>単一のデータ型のデータを格納する。>科学演算
# データ・オブジェクト全体を格納したい場合は>を格納するために、より特殊な構造体が必要になる。
しかし、複合データのストレージだけでなく、ストレージ用のオブジェクトの形で、各オブジェクトのメモリサイズは同じであり、一般的に、データを格納するためにそのような構造を使用しませんが、特別な型があるため、後続を格納するために
V.配列作成の特殊関数
、固定値配列の作成
1, Numpy.arange関数による1次元配列の作成
numpy.arange(start=None, stop=None, step=None, dtype=None)
start | inti |
stop | 受け取り int, 終了位置 |
step | 開始位置が0、ステップサイズが1の場合、開始位置とステップサイズを同時に省略することができます。 |
dtype | 配列のデータ型を指定します。省略した場合は、オブジェクトの保存に必要な最小の型を選択します。 |
コードの実装:
# 配列を分割するには、np.hsplit、np.vsplit、np.splitを使う。.arange 一次元配列を作成する
# パラメータ1:開始位置
# パラメータ2:終了位置
# パラメータ3:ステップ
arr = np.arange(1, 8, 2)
# 注意:ステップサイズが1の場合、ステップサイズは省略できる。
arr1 = np.arange(1, 8)
# 注意:開始位置が0、ステップサイズが1の場合、開始位置とステップサイズの両方を省略することができる。
arr2 = np.arange(5)
print('arr:
', arr)
print('arr 型:
', type(arr))
2, Numpy.linspace関数による等差数配列の作成
Numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
ndmin | intを受け取り、開始位置 |
stop | intを受け取り, 終了位置 |
num | 受け取る int, 生成される配列の要素数, デフォルトは 50. |
endpoint | boolean 型を受け取ります。デフォルトは True で、終点を含むことを表します。 |
コードの実装:
# 配列を分割するには、np.hsplit、np.vsplit、np.splitを使う。.linspace等しい差の配列を作る
# 等しい差の配列 ----.> 最後の要素と最初の要素の差が一定である順序配列。
# start : 開始位置
# end : 終了位置
# num :デフォルトは50であり、これは作成された配列の要素数を指す。
# endpoint : デフォルトはTrueである。
arr = np.linspace(1, 6, 5)
print('arr:
', arr)
print('arr: :
', type(arr))
3, Numpy.logspace関数による等角配列の作成
start | intを受け取り、開始位置 |
stop | inti |
num | 受け取る int, 生成される配列の要素数, デフォルトは 50. |
endpoint | boolean 型を受け取ります。デフォルトは True で、終点を含むことを表します。 |
base | base 型を受け取ります。デフォルトは 10.0 です。 |
コードの実装:
# 配列を分割するには、np.hsplit、np.vsplit、np.splitを使う。.logspace等価比の配列を作る
# 等しい割合の配列---。>最後の要素と前の要素の比が一定である順序配列。
# start : 開始位置
# end : 終了位置
# num : デフォルトは50であり、これは作成された配列の要素数を指す。
# endpoint :デフォルトはTrueである。
# base デフォルト値は基数である10である。
arr = np.logspace(0, 1, 3) # 10個の配列から分割された配列を指す。^0 最大10個の^1 長さ3の等しい割合の配列を作る。
arr1 = np.logspace(0, 2, 3, base=2) # 2つの配列から分割された配列を指す。^0 ^2 長さ3の等しい割合の配列を作る。
print('arr:
', arr1)
print('arr :
', type(arr1))
4, Numpy.zeros関数ですべての0の配列を作成します。
Numpy.zeros(shape, dtype=None, order='C')
shape | タプルを受け取り、生成される配列の形状を表します。 |
dtype | 配列に必要なデータの型を示す data-type を受け取ります。 |
コードの実装:
# 配列を分割するには、np.hsplit、np.vsplit、np.splitを使う。.zeros全て0の配列を作成する ---- プレースホルダ
# shape : 作成される配列の形状
arr = np.zeros((2, 3))
print('arr:
', arr)
print('arr 型:
', type(arr))
5、すべて1の配列を作成するNumpy.ones関数
Numpy.ones(shape, dtype=None, order='C')
ndmin | タプルを受け取り、生成される配列の形状を表します。 |
dtype | 配列に必要なデータの型を示すdata-typeを受け取ります。 |
コードの実装:
# 配列を分割するには、np.hsplit、np.vsplit、np.splitを使う。.onesすべて1の配列を作る - プレースホルダ
# shape:作成される配列の形状
arr = np.ones((2, 2, 3))
print('arr:
', arr)
print('arr 型:
', type(arr))
6, 対角行列に似た配列を作成するNumpy.diag関数
Numpy.diag(v, k=0)
v | 配列またはリストを受け取る |
コードの実装
# 配列を分割するには、np.hsplit、np.vsplit、np.splitを使う。.diag対角行列のような配列を作る。
arr = np.diag(v=[1, 2, 3, 4], k=0)
arr1 = np.diag(v=[1, 2, 3, 4], k=-2)
# vが1次元の場合,k=0, vは作成された対角配列の対角要素である。
# vが1次元の場合,k!= 0, vで指定された要素をk単位上下に移動する。
v = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
print('v:
', v)
arr2 = np.diag(v=v, k=0)
arr3 = np.diag(v=v, k=1)
# # vが2次元の場合,k=0配列を分割すると、vの対角要素からなる配列が得られる。
# # vが2次元の場合,k !=0 , v対角線の位置を取得し、対角線に沿ってk単位移動する。
print('arr:
', arr)
print('arr :
', type(arr))
7、単位行列に似た配列を作成するNumpy.eye関数
Numpy.eye(N, M=None, k=0, dtype=float)
N | 行の配列を生成します。デフォルトでは、単位行列に類似した配列の数と同じ数の行と列が生成されます。 |
dtype | 配列のデータ型を指定します. |
コードの実装:
# 配列を分割するには、np.hsplit、np.vsplit、np.splitを使う。.eye単位行列に似た配列を作る。
# # N
# # M デフォルトは列数を示すNoneである。
# # N,Mがパラメータとして渡された場合、デフォルトはNである。=M=渡されるパラメータ
arr = np.eye(3, k=0)
arr1 = np.eye(N=3, M=4, k=0)
arr2 = np.eye(N=4, M=3, k=0)
# # N Mが等しくない場合、単位行列のような配列も生成される。
# # もしk!=0 配列を分割すると、対角線上の1がk単位だけ上下に移動する。
print('arr:
', arr)
print('arr :
', type(arr))
, 乱数値配列の作成
手動で配列を作成すると、多くの場合、要件を満たしていない、Numpyは乱数を生成する強力な機能を提供します。
1, [0,1)一様分布の乱数配列の作成
を作成します:
ndmin | 生成された配列の要素,または配列の形状を表す int またはタプルを受け取ります. |
コードの実装:
# np.hsplit、np.vsplit、np.splitを使用する。.random.random 配列の[0,1)一様分散配列
# 一様分布
# パラメータサイズ: 作成される配列の要素数を指定するか、作成される配列の形状を指定することができる。
arr = np.random.random(10)
arr1 = np.random.random((2,3))
print('arr:
', arr)
print('arr :
', type(arr))
np.random.randを使用することもできます。
*dn | を使用して、変数パラメータ(通常は、生成される配列の要素数または生成される配列の行数および列数)を受け取ることもできます。 |
コードの実装
# np.hsplit、np.vsplit、np.splitを使って配列を分割することもできる。.random.randを作成する。[0,1)一様分布配列に従う
# : 作成される配列の要素数、または行数、列数を指定できるが、形状を指定することはできない。
arr = np.random.rand(10)
# arr1 = np.random.rand((2,3)) # エラー、シェイプになれない
arr2 = np.random.rand(2, 3)
print('arr:
', arr)
print('arr :
', type(arr))
2, 標準正規分布を満たす配列の作成
np.random.randnを使用して、標準正規分布を満たす配列を作成することができます。
標準正規分布:
*dn | 変数パラメータを受け取ります。通常は、生成される配列の要素数、または生成される配列の行数と列数です。 |
コードの実装
# 配列はnp.hsplit、np.vsplit、np.splitを使って分割できる。.random.randn標準正規分布に従う配列を作成する。
# 標準正規分布
# パラメータ: 作成される配列の要素数、または行数、列数を指定できるが、形状は指定できない。
arr = np.random.randn(10)
# arr = np.random.randn((2,3)) # エラー、シェイプになれない
arr1 = np.random.randn(2,3)
print('arr:
', arr)
print('arr :
', type(arr))
3, 指定された範囲のランダムな整数配列を作成します。
np.random.randintを使用すると、指定した範囲[low,high]の乱数整数配列を作成することができます。
*dn | 生成される乱数整数配列の範囲の最小値を int で返します。 |
high | 生成される乱数整数配列の範囲の最大値を int で返します。デフォルトでは最大値は含まれないので、注意: low< /> を返します。 |
size | 乱数整数配列の要素数、または乱数整数配列の形状を示す int またはタプルを受け取ります。 |
dtype | 生成する配列のデータ型を返します。 |
コードの実装
# 配列を分割するには、np.hsplit、np.vsplit、np.splitを使う。.random.randint を作成する。[low,high)ランダムな整数の配列は、np.hsplitを使って分割できる。
# low :
# high最大値
# size: には、作成される配列の要素数や、作成される配列の形状を指定することができる。
arr = np.random.randint(low=1, high=10, size=10)
arr1 = np.random.randint(low=1, high=10, size=(2, 3))
print('arr:
', arr)
print('arr :
', type(arr))
# np.hsplit、np.vsplit、np.splitが使える。.random.uniform [low,high)小数のランダム配列
# ランダム分布:各区間に入る確率は同じである。
# low :
# high :最大値
# size :には、作成される配列の要素数や、作成される配列の形状を指定することができる。
arr = np.random.uniform(low=0.0, high=1.0, size=10)
arr1 = np.random.uniform(low=0.0, high=1.0, size=(2,3))
print('arr:
', arr)
print('arr :
', type(arr))
その他の乱数生成にも random モジュールを使用できます。
ndmin | 乱数生成器のシードを決定します。 |
ndim | シーケンスのランダムな順列またはランダムな順列の範囲を返します。 |
shape | 配列をランダムに並べ替えます。 |
size | 二項分布乱数を生成します。 |
dtype | 正規分布の乱数を生成します。 |
itemsize | ベータ分布の乱数を生成します。 |
bool | カイ二乗分布の乱数を生成します。 |
inti | ガンマ分布の乱数を生成します。 |
配列のインデックス
1, 1次元配列インデックス
import numpy as np
# # 一次元配列を作成する
arr = np.array([2, 3, 1, 5, 6, 4, 0])
print('arr:
', arr)
print('arr :
', type(arr))
#
# # arrの1要素を取得する - 添え字
print('arrの1要素を取得する: ', arr[2])
#
# # arrの4つの要素を取得する - 添え字
print('arrの4つの要素を取得する: ', arr[-2])
#
# # arrの1要素を取得する --- スライス
print('arrの1要素を取得する: ', arr[2:3:1])
#
# # arrの4要素を取得する --- スライスする
print('arrの4つの要素を取得する: ', arr[-2:-1:1])
#
# # arrの1要素と4要素を取得する - slice ----.>添え字は通常の
print('arrの1要素と4要素を取得する: ', arr[2:-1:3])
#
# # arrの1,5,4要素の取得 - 添え字のリスト
print('arrの1要素と5要素と4要素を取得する: ', arr[[2, 3, -2]])
#
# # 要素にインデックスを付けるときに添え字を使うと、データの次元が小さくなる。
# # スライスを使っても次元は減らない
# # 添え字リストを使用する。>添え字リストの各添え字の値を取得する ---。>再び結合する
2, 二次元配列インデックス
# 2次元配列の作成
arr = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]])
print('arr:
', arr)
print('arr 型:
', type(arr))
# arrの中の6つの要素を取得する - 添え字
print('配列を取得する 6つの要素の内部: ', arr[1, 1])
# arr内の15個の要素を取得する - 添え字
print('arr内の15個の要素を取得する: ', arr[3, -2])
# arr内の6要素を取得する - スライス
print('配列を取得する 6つの要素の内部: ', arr[1:2, 1:2])
# arr内の15個の要素を取得する - slice
print('arr内の15個の要素を取得する: ', arr[-1:, -2:-1])
# arrの値を[6 8 10 11] 要素 -- 添え字リスト -- 一対一対応の前と後
print('arrの値を[6 8 10 11] :', arr[[1, 1, 2, 2], [1, 3, 1, 2]])
# 添え字のリスト --- 対応する添え字の値を別々に取得する --- そしてそれらを結合する
# 配列を取得する 
# [[6 7]
# [10 11]] 要素 - スライス - 添え字を正規表現で記述する。
print('arr内の複数の要素を取得する:
', arr[1:3, 1:3])
3, 多次元配列インデックス
# 2次元配列の作成
arr = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]])
print('arr:
', arr)
print('arr 型:
', type(arr))
# arr3次元配列 ----.> arr[ブロック、行、列]
# arr n次元の配列 ----...> arr[n-1 ] n-1カンマで次元を区切り、各次元に個別にインデックスを付ける
# 高次元配列は低次元配列から構成されるという考えを利用する。
# arrの6要素を取得する
print('arrの中の6つの要素は',arr[1][1])
# 配列のインデックスにboolを使用する --- Falseを取り除き、Trueを保持する。
# 注意: bool配列の長さは、インデックスを付ける次元のサイズと同じでなければならない。
# 最初にbool配列を作成する。
mask = np.array([0, 1, 1, 0], dtype=np.bool)
# print('mask:', mask)
# 2次元配列のインデックスにマスクを使用する
print('bool配列のインデックス:
', arr[mask, :])
print('bool配列のインデックス:
', arr[:, mask])
print('bool配列のインデックス:
', arr[mask, mask]) # 同じ行と列は添え字のリストと同じように理解される。
print('bool配列のインデックス:
', arr[[False, True, True, False], [False, True, True, False]])
配列の形状変換
Ndarray 配列の形状は shape 属性によって得ることができます。
形状については、配列を作成する際に shape パラメータで指定することができます。例えば、上記の all 0 と all 1 を作成する処理では、shape パラメータで作成する配列の形状を指定します。
では、配列が作成された後、どのように配列の形状を変更するのでしょうか?
配列の形状を変更するには、shape 属性を次のように指定します:
1.shape属性に基づく変換
コードの実装
import numpy as np
# 一次元配列を作成する
arr = np.arange(6)
print('arr:
', arr)
# arrの形状を2次元に変更する。
# shape プロパティの再割り当て
arr.shape = (2, 3)
print('arr:
', arr)
print('arr:
', arr.shape)
2, リシェイプ機能による変形
を使用すると、配列の形状を変更するためにreshape関数を使用することができます。
コードの実装
# 一次元配列を作成する
arr = np.arange(6)
print('arr:
', arr)
# reshapeメソッドは形状を変更するために使われる。
arr = arr.reshape((2, 3))
print('arr:
', arr)
print('arr:
', arr.shape)
# reshapeshapeとの最大の違いは、reshapeが新しい配列を返すのに対し、shapeは元の配列を直接変更することである。
# 注意: reshape((-1,1)) # -1この場合、roleはプレースホルダーであり、arrを2次元1列に変換しておくこと。
arr = arr.reshape((-1, 1))
print('arr:
', arr)
print('arr:
', arr.shape)
# 注意:形状を変換する場合、要素数を変更することはできない。
ただし、配列の形状を変更する際には、変更前の要素数と変更後の要素数が等しいことを確認しないとエラーになることに注意しましょう!
もうひとつ注意すべきことがあります。それは reshape() の場合です。
配列作成APIとreshapeについて学んだ後は、np.arangeとreshapeを使って高次元配列を作成することができます。
コードの実装
# np.hsplit、np.vsplit、np.splitを使用する。.arange 高次元配列を作成するには、np.hplitとnp.reshapeを使用する。
arr = np.arange(16).reshape((4, 4))
print('arr:
', arr)
3、np.flattenとnp.ravel関数変換に基づく
np.arangeとreshapeを使うことができます。
とreshapeを使って高次元配列を作ることができます。では、高次元配列を1次元配列に平坦化するにはどうすればよいでしょうか?
shape属性は再割り当てされます。
reshape 属性は
np.flattenとnp.ravelを使用して、高次元配列を1次元に平坦化することができます。
コードの実装
# 高次元の配列を再び1次元に展開するには?
# shapeプロパティの再割り当て
arr.shape = (-1,) # -1 はプレースホルダである。
print('arr:
', arr)
# reshape
arr = arr.reshape((-1,))
print('arr:
', arr)
# np.hsplit、np.vsplit、np.splitを使用する。.arange 高次元配列を作成するには、np.hplitとnp.reshapeを使用する。
arr = np.arange(16).reshape((4, 4))
print('arr:
', arr)
# flatten メソッド --- メモリのコピーを作成する
arr = arr.flatten('C')
arr1 = arr.flatten('F')
print('arr:
',arr)
print('arr:
',arr1)
# ravel メソッド - コピーしない
arr = arr.ravel('C')
arr = arr.ravel('F')
print('arr:
', arr)
配列の結合と分割
1, 配列のマージ
np.hstack、np.vstack、np.concatenateを使って、配列を連結したり結合したりすることができます。
軸の方向は図の通りです:
import numpy as np
# 配列1を作成する
arr1 = np.array([[1, 2], [3, 4]])
# 配列2を作成する
arr2 = np.zeros((2, 2), dtype=np.int32)
print('arr1:
', arr1)
print('arr2:
', arr2)
print('*' * 100)
# 右に分割する --- 水平に分割する
all_arr = np.hstack((arr1, arr2))
print('all_arr:
', all_arr)
# 下方への分割 --- 垂直への分割
all_arr = np.vstack((arr1, arr2))
print('all_arr:
', all_arr)
# 配列はnp.hsplit、np.vsplit、np.splitを使って分割できる。.concatenate右に分割する 下に分割する
# axis --->軸の方向
# axis = 0 --->行の方向>下 --- np.vstack
all_arr = np.concatenate((arr1, arr2), axis=0)
print('all_arr:
', all_arr)
# axis=1 ---->列の向き ----.>右へ ---np.hstack
all_arr = np.concatenate((arr1, arr2), axis=1)
print('all_arr:
', all_arr)
2, 配列の分割
np.hsplit、np.vsplit、np.splitを使って配列を分割することができます。
コードの実装
#
# 大きな2次元配列を作る
arr = np.arange(16).reshape((4, 4))
print('arr:
', arr)
#
# ---vsplit -- の方向に行を分割する。
# ---hsplit -- 列の方向を分割する
# 注意:これは平均的な分割であり、以下の値で割り切れる必要がある。
split_res = np.vsplit(arr, 2)
print('split_res:
',split_res)
split_res = np.hsplit(arr, 2)
print('split_res:
', split_res)
# split ---vsplitと同じ
split_res = np.split(arr, 2, axis=0)
print('split_res:
',split_res)
# split --hsplitと同じである。
split_res = np.split(arr, 2, axis=1)
print('split_res:
', split_res)
# 注意: 配列を分割する際には、この
# :1,1:3,3: --->
# arr[:1,:]
# arr[1:3,:]
# arr[3:,:]
split_res = np.split(arr, [1, 3], axis=0)
print('split_res:
', split_res)
# もし本当にデータの一部を取得したいのであれば、配列のインデックスを使用する!
# 最初の3列を配列の一部として取得し、最後の1列を配列の一部として取得する。
split_res_1 = arr[:, :3]
split_res_2 = arr[:, -1:]
print('split_res_1:
', split_res_1)
print('split_res_2:
', split_res_2)
お知らせ
# 注意: 一般的にsplitは使わない --- 本当にデータの一部を取得したい場合 --- 配列のインデックスを使う
# 最初の3列を配列の一部として取得し、最後の1列を配列の一部として取得する。
split_res_1 = arr[:, :3]
split_res_2 = arr[:, -1:]
print('split_res_1:
', split_res_1)
print('split_res_2:
', split_res_2)
# # ある列のデータが不要な場合---。>bool配列のインデックス
# # 配列を作成する
arr = np.arange(12).reshape((2, 6))
print('arr:
', arr)
#
# # ブール配列の作成
mask = np.array([1, 1, 0, 1, 0, 1], dtype=np.bool)
print('mask:
', mask)
#
# # フィルタリング
res = arr[:, mask]
print('res:
', res)