Numpy 配列操作

Numpy には配列を処理する関数がいくつか含まれており、おおまかに次のように分類できます:


配列の形状を変更

関数 説明
reshape データを変更せずに形状を変更する
flat 配列要素のイテレータ
flatten 配列のコピーを返し、コピーへの変更は元の配列に影響しない
ravel フラット化した配列を返す

numpy.reshape

numpy.reshape 関数は、データを変更せずに形状を変更できます。形式は次のとおりです:

numpy.reshape(arr, newshape, order='C')
  • arr:形状を変更する配列
  • newshape:整数または整数の配列。新しい形状は元の形状と互換性がある必要があります
  • order:'C' -- 行方向、'F' -- 列方向、'A' -- 元の順序、'k' -- メモリ内での要素の出現順序。

例

import numpy as np a = np.arange(8) print ('元の配列:') print (a) print ('\n') b = a.reshape(4,2) print ('変更後の配列:') print (b)

出力結果は次のとおりです:

原始数组:
[0 1 2 3 4 5 6 7]

修改后的数组:
[[0 1]
 [2 3]
 [4 5]
 [6 7]]

numpy.ndarray.flat

numpy.ndarray.flat は配列要素のイテレータです。例は次のとおりです:

例

import numpy as np a = np.arange(9).reshape(3,3) print ('元の配列:') for row in a: print (row) #配列内の各要素を処理するには、flat属性を使用できます。この属性は配列要素のイテレータです: print ('反復処理後の配列:') for element in a.flat: print (element)

出力結果は次のとおりです:

原始数组:
[0 1 2]
[3 4 5]
[6 7 8]
迭代后的数组:
0
1
2
3
4
5
6
7
8

numpy.ndarray.flatten

numpy.ndarray.flatten は配列のコピーを返し、コピーへの変更は元の配列に影響しません。形式は次のとおりです:

ndarray.flatten(order='C')

引数の説明:

  • order:'C' -- 行方向、'F' -- 列方向、'A' -- 元の順序、'K' -- メモリ内での要素の出現順序。

例

import numpy as np a = np.arange(8).reshape(2,4) print ('元の配列:') print (a) print ('\n') # デフォルトは行方向 print ('フラット化した配列:') print (a.flatten()) print ('\n') print ('F スタイルの順序でフラット化した配列:') print (a.flatten(order = 'F'))

出力結果は次のとおりです:

原数组:
[[0 1 2 3]
 [4 5 6 7]]


展开的数组:
[0 1 2 3 4 5 6 7]


以 F 风格顺序展开的数组:
[0 4 1 5 2 6 3 7]

numpy.ravel

numpy.ravel() は配列要素をフラット化します。順序は通常「Cスタイル」で、返されるのは配列のビュー(view で、C/C++ の参照(reference)に少し似た意味です)です。変更は元の配列に影響します。

この関数は2つの引数を受け取ります:

numpy.ravel(a, order='C')

引数の説明:

  • order:'C' -- 行方向、'F' -- 列方向、'A' -- 元の順序、'K' -- メモリ内での要素の出現順序。

例

import numpy as np a = np.arange(8).reshape(2,4) print ('元の配列:') print (a) print ('\n') print ('ravel 関数を呼び出した後:') print (a.ravel()) print ('\n') print ('F スタイルの順序で ravel 関数を呼び出した後:') print (a.ravel(order = 'F'))

出力結果は次のとおりです:

原数组:
[[0 1 2 3]
 [4 5 6 7]]


调用 ravel 函数之后:
[0 1 2 3 4 5 6 7]


以 F 风格顺序调用 ravel 函数之后:
[0 4 1 5 2 6 3 7]

配列の転置

関数 説明
transpose 配列の次元を入れ替える
ndarray.T とself.transpose()同じ
rollaxis 指定した軸を後方にロールする
swapaxes 配列の2つの軸を入れ替える

numpy.transpose

numpy.transpose 関数は配列の次元を入れ替えるために使用します。形式は次のとおりです:

numpy.transpose(arr, axes)

引数の説明:

  • arr:操作する配列
  • axes:整数のリストで、次元に対応します。通常はすべての次元が入れ替えられます。

例

import numpy as np a = np.arange(12).reshape(3,4) print ('元の配列:') print (a ) print ('\n') print ('転置した配列:') print (np.transpose(a))

出力結果は次のとおりです:

原数组:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]


对换数组:
[[ 0  4  8]
 [ 1  5  9]
 [ 2  6 10]
 [ 3  7 11]]

numpy.ndarray.T は numpy.transpose と似ています:

例

import numpy as np a = np.arange(12).reshape(3,4) print ('元の配列:') print (a) print ('\n') print ('転置した配列:') print (a.T)

出力結果は次のとおりです:

原数组:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]


转置数组:
[[ 0  4  8]
 [ 1  5  9]
 [ 2  6 10]
 [ 3  7 11]]

numpy.rollaxis

numpy.rollaxis 関数は、指定した軸を後方の特定の位置までロールします。形式は次のとおりです:

numpy.rollaxis(arr, axis, start)

引数の説明:

  • arr:配列
  • axis:後方にロールする軸。他の軸の相対位置は変わりません。
  • start:デフォルトは0で、完全なロールを意味します。特定の位置にロールされます。

例

import numpy as np # 3次元の ndarray を作成 a = np.arange(8).reshape(2,2,2) print ('元の配列:') print (a) print ('配列から1つの値を取得:') print(np.where(a==6)) print(a[1,1,0]) # 6 です print ('\n') # 軸2を軸0にロール(幅から深さへ) print ('rollaxis 関数を呼び出し:') b = np.rollaxis(a,2,0) print (b) # 要素 a[1,1,0]、つまり 6 の座標は [0, 1, 1] になります # 最後の 0 が先頭に移動します print(np.where(b==6)) print ('\n') # 軸2を軸1にロール:(幅から高さへ) print ('rollaxis 関数を呼び出し:') c = np.rollaxis(a,2,1) print (c) # 要素 a[1,1,0]、つまり 6 の座標は [1, 0, 1] になります # 最後の 0 とその前の 1 の位置が入れ替わります print(np.where(c==6)) print ('\n')

出力結果は次のとおりです:

原数组:
[[[0 1]
  [2 3]]

 [[4 5]
  [6 7]]]
获取数组中一个值:
(array([1]), array([1]), array([0]))
6


调用 rollaxis 函数:
[[[0 2]
  [4 6]]

 [[1 3]
  [5 7]]]
(array([0]), array([1]), array([1]))


调用 rollaxis 函数:
[[[0 2]
  [1 3]]

 [[4 6]
  [5 7]]]
(array([1]), array([0]), array([1]))

numpy.swapaxes

numpy.swapaxes 関数は配列の2つの軸を交換するために使用します。形式は次のとおりです:

numpy.swapaxes(arr, axis1, axis2)
  • arr:入力配列
  • axis1:最初の軸に対応する整数
  • axis2:2番目の軸に対応する整数

例

import numpy as np # 3次元の ndarray を作成 a = np.arange(8).reshape(2,2,2) print ('元の配列:') print (a) print ('\n') # 軸0(深さ方向)と軸2(幅方向)を交換します print ('swapaxes 関数を呼び出した後の配列:') print (np.swapaxes(a, 2, 0))

出力結果は次のとおりです:

原数组:
[[[0 1]
  [2 3]]

 [[4 5]
  [6 7]]]


调用 swapaxes 函数后的数组:
[[[0 4]
  [2 6]]

 [[1 5]
  [3 7]]]

配列の次元を変更

次元 説明
broadcast ブロードキャストを模倣するオブジェクトを生成する
broadcast_to 配列を新しい形状にブロードキャストする
expand_dims 配列の形状を拡張する
squeeze 配列の形状から大きさ1の次元を削除する

numpy.broadcast

numpy.broadcast は、ブロードキャストを模倣するオブジェクトを生成するために使用されます。ある配列を別の配列にブロードキャストした結果をカプセル化したオブジェクトを返します。

この関数は2つの配列を入力引数として受け取ります。例は次のとおりです:

例

import numpy as np x = np.array([[1], [2], [3]]) y = np.array([4, 5, 6]) # y に x をブロードキャスト b = np.broadcast(x,y) # 自身のコンポーネントに基づくイテレータのタプルである iterator 属性を持ちます print ('y に x をブロードキャスト:') r,c = b.iters # Python3.x では next(context) 、Python2.x では context.next() print (next(r), next(c)) print (next(r), next(c)) print ('\n') # shape 属性はブロードキャストオブジェクトの形状を返します print ('ブロードキャストオブジェクトの形状:') print (b.shape) print ('\n') # 手動で broadcast を使って x と y を加算する b = np.broadcast(x,y) c = np.empty(b.shape) print ('手動で broadcast を使用して x と y を加算:') print (c.shape) print ('\n') c.flat = [u + v for (u,v) in b] print ('flat 関数を呼び出し:') print (c) print ('\n') # NumPy 組み込みのブロードキャストサポートと同じ結果を得ました print ('x と y の和:') print (x + y)

出力結果:

对 y 广播 x:
1 4
1 5


广播对象的形状:
(3, 3)


手动使用 broadcast 将 x 与 y 相加:
(3, 3)


调用 flat 函数:
[[5. 6. 7.]
 [6. 7. 8.]
 [7. 8. 9.]]


x 与 y 的和:
[[5 6 7]
 [6 7 8]
 [7 8 9]]

numpy.broadcast_to

numpy.broadcast_to 関数は、配列を新しい形状にブロードキャストします。元の配列の読み取り専用ビューを返します。通常は連続ではありません。新しい形状が NumPy のブロードキャスト規則に適合しない場合、この関数は ValueError をスローすることがあります。

numpy.broadcast_to(array, shape, subok)

例

import numpy as np a = np.arange(4).reshape(1,4) print ('元の配列:') print (a) print ('\n') print ('broadcast_to 関数を呼び出した後:') print (np.broadcast_to(a,(4,4)))

出力結果:

原数组:
[[0 1 2 3]]


调用 broadcast_to 函数之后:
[[0 1 2 3]
 [0 1 2 3]
 [0 1 2 3]
 [0 1 2 3]]

numpy.expand_dims

numpy.expand_dims 関数は、指定した位置に新しい軸を挿入して配列の形状を拡張します。関数の形式は次のとおりです:

 numpy.expand_dims(arr, axis)

引数の説明:

  • arr:入力配列
  • axis:新しい軸を挿入する位置

例

import numpy as np x = np.array(([1,2],[3,4])) print ('配列 x:') print (x) print ('\n') y = np.expand_dims(x, axis = 0) print ('配列 y:') print (y) print ('\n') print ('配列 x と y の形状:') print (x.shape, y.shape) print ('\n') # 位置1に軸を挿入 y = np.expand_dims(x, axis = 1) print ('位置1に軸を挿入した後の配列 y:') print (y) print ('\n') print ('x.ndim と y.ndim:') print (x.ndim,y.ndim) print ('\n') print ('x.shape と y.shape:') print (x.shape, y.shape)

出力結果は次のとおりです。

数组 x:
[[1 2]
 [3 4]]


数组 y:
[[[1 2]
  [3 4]]]


数组 x 和 y 的形状:
(2, 2) (1, 2, 2)


在位置 1 插入轴之后的数组 y:
[[[1 2]]

 [[3 4]]]


x.ndim 和 y.ndim:
2 3


x.shape 和 y.shape:
(2, 2) (2, 1, 2)

numpy.squeeze

numpy.squeeze 関数は、指定された配列の形状から1次元のエントリを削除します。関数の形式は次のとおりです。

numpy.squeeze(arr, axis)

パラメータの説明:

  • arr: 入力配列
  • axis: 形状内の1次元エントリのサブセットを選択するための整数または整数タプル

例

import numpy as np x = np.arange(9).reshape(1,3,3) print ('配列 x:') print (x) print ('\n') y = np.squeeze(x) print ('配列 y:') print (y) print ('\n') print ('配列 x と y の形状:') print (x.shape, y.shape)

出力結果は次のとおりです。

数组 x:
[[[0 1 2]
  [3 4 5]
  [6 7 8]]]


数组 y:
[[0 1 2]
 [3 4 5]
 [6 7 8]]


数组 x 和 y 的形状:
(1, 3, 3) (3, 3)

配列の結合

関数 説明
concatenate 既存の軸に沿って配列のシーケンスを連結する
stack 新しい軸に沿って一連の配列を追加する。
hstack シーケンス内の配列を水平方向(列方向)にスタックする
vstack シーケンス内の配列を垂直方向(行方向)にスタックする

numpy.concatenate

numpy.concatenate 関数は、指定された軸に沿って同じ形状の2つ以上の配列を連結するために使用されます。形式は次のとおりです。

numpy.concatenate((a1, a2, ...), axis)

パラメータの説明:

  • a1, a2, ...: 同じ型の配列
  • axis: 配列を連結する軸。デフォルトは 0

例

import numpy as np a = np.array([[1,2],[3,4]]) print ('1つ目の配列:') print (a) print ('\n') b = np.array([[5,6],[7,8]]) print ('2つ目の配列:') print (b) print ('\n') # 2つの配列の次元は同じ print ('軸0に沿って2つの配列を連結:') print (np.concatenate((a,b))) print ('\n') print ('軸1に沿って2つの配列を連結:') print (np.concatenate((a,b),axis = 1))

出力結果は次のとおりです。

第一个数组:
[[1 2]
 [3 4]]


第二个数组:
[[5 6]
 [7 8]]


沿轴 0 连接两个数组:
[[1 2]
 [3 4]
 [5 6]
 [7 8]]


沿轴 1 连接两个数组:
[[1 2 5 6]
 [3 4 7 8]]

numpy.stack

numpy.stack 関数は、新しい軸に沿って配列のシーケンスを連結するために使用されます。形式は次のとおりです。

numpy.stack(arrays, axis)

パラメータの説明:

  • arrays同じ形状の配列のシーケンス
  • axis: 結果の配列内の軸。入力配列はこの軸に沿ってスタックされます

例

import numpy as np a = np.array([[1,2],[3,4]]) print ('1つ目の配列:') print (a) print ('\n') b = np.array([[5,6],[7,8]]) print ('2つ目の配列:') print (b) print ('\n') print ('軸0に沿って2つの配列をスタック:') print (np.stack((a,b),0)) print ('\n') print ('軸1に沿って2つの配列をスタック:') print (np.stack((a,b),1))

出力結果は次のとおりです。

第一个数组:
[[1 2]
 [3 4]]


第二个数组:
[[5 6]
 [7 8]]


沿轴 0 堆叠两个数组:
[[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]]


沿轴 1 堆叠两个数组:
[[[1 2]
  [5 6]]

 [[3 4]
  [7 8]]]

numpy.hstack

numpy.hstack は numpy.concatenate の便利なラッパーであり、2番目の軸(axis=1)に沿って配列を水平にスタックします。

numpy.hstack は1次元配列を列ベクトルと見なして連結します。これは numpy.concatenate([numpy.atleast_1d(arr) for arr in arrays], axis=1) と同等です(すべての配列の次元が ≥2 の場合、axis=1 に沿って直接連結します)。

例

import numpy as np a = np.array([[1,2],[3,4]]) print ('1つ目の配列:') print (a) print ('\n') b = np.array([[5,6],[7,8]]) print ('2つ目の配列:') print (b) print ('\n') print ('水平スタック:') c = np.hstack((a,b)) print (c) print ('\n')

出力結果は次のとおりです。

第一个数组:
[[1 2]
 [3 4]]


第二个数组:
[[5 6]
 [7 8]]


水平堆叠:
[[1 2 5 6]
 [3 4 7 8]]

numpy.vstack

numpy.vstack は numpy.concatenate の便利なラッパーであり、1番目の軸(axis=0)に沿って配列を垂直にスタックします。

numpy.vstack は1次元配列を自動的に2次元の行ベクトルに昇格させてから垂直方向に連結します。これは numpy.concatenate([numpy.atleast_2d(arr) for arr in arrays], axis=0) と同等です。

例

import numpy as np a = np.array([[1,2],[3,4]]) print ('1つ目の配列:') print (a) print ('\n') b = np.array([[5,6],[7,8]]) print ('2つ目の配列:') print (b) print ('\n') print ('垂直スタック:') c = np.vstack((a,b)) print (c)

出力結果は次のとおりです。

第一个数组:
[[1 2]
 [3 4]]


第二个数组:
[[5 6]
 [7 8]]


竖直堆叠:
[[1 2]
 [3 4]
 [5 6]
 [7 8]]

配列の分割

関数 配列と操作
split 1つの配列を複数の部分配列に分割する
hsplit 1つの配列を水平方向(列方向)に複数の部分配列に分割する
vsplit 1つの配列を垂直方向(行方向)に複数の部分配列に分割する

numpy.split

numpy.split 関数は、特定の軸に沿って配列を部分配列に分割します。形式は次のとおりです。

numpy.split(ary, indices_or_sections, axis)

パラメータの説明:

  • ary: 分割される配列
  • indices_or_sections: 整数の場合、その数で均等に分割します。配列の場合、軸に沿った分割位置です(左開右閉)。
  • axis: 分割する方向を設定します。デフォルトは 0 で、横方向(水平方向)に分割します。1 の場合は縦方向(垂直方向)に分割します。

例

import numpy as np a = np.arange(9) print ('1つ目の配列:') print (a) print ('\n') print ('配列を同じサイズの3つの部分配列に分割:') b = np.split(a,3) print (b) print ('\n') print ('1次元配列で示された位置で配列を分割:') b = np.split(a,[4,7]) print (b)

出力結果は次のとおりです。

第一个数组:
[0 1 2 3 4 5 6 7 8]


将数组分为三个大小相等的子数组:
[array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])]


将数组在一维数组中表明的位置分割:
[array([0, 1, 2, 3]), array([4, 5, 6]), array([7, 8])]

axis が 0 の場合は水平方向に分割し、axis が 1 の場合は垂直方向に分割します:

例

import numpy as np

a = np.arange(16).reshape(4, 4)
print('1つ目の配列:')
print(a)
print('\n')
print('デフォルト分割(0軸):')
b = np.split(a,2)
print(b)
print('\n')

print('水平方向に分割:')
c = np.split(a,2,1)
print(c)
print('\n')

print('水平方向に分割:')
d= np.hsplit(a,2)
print(d)

出力結果は次のとおりです。

第一个数组:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]


默认分割(0轴):
[array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])]


沿水平方向分割:
[array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])]


沿水平方向分割:
[array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])]

numpy.hsplit

numpy.hsplit 関数は配列を水平方向に分割するために使用され、返す同じ形状の配列の数を指定して元の配列を分割します。

例

import numpy as np harr = np.floor(10 * np.random.random((2, 6))) print ('元のarray:') print(harr) print ('分割後:') print(np.hsplit(harr, 3))

出力結果は次のとおりです。

原array:
[[4. 7. 6. 3. 2. 6.]
 [6. 3. 6. 7. 9. 7.]]
拆分后:
[array([[4., 7.],
       [6., 3.]]), array([[6., 3.],
       [6., 7.]]), array([[2., 6.],
       [9., 7.]])]

numpy.vsplit

numpy.vsplit は垂直軸に沿って分割します。分割方法は hsplit と同じです。

例

import numpy as np a = np.arange(16).reshape(4,4) print ('1つ目の配列:') print (a) print ('\n') print ('垂直分割:') b = np.vsplit(a,2) print (b)

出力結果は次のとおりです。

第一个数组:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]


竖直分割:
[array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])]

配列要素の追加と削除

関数 要素と説明
resize 指定された形状の新しい配列を返す
append 配列の末尾に値を追加する
insert 指定された軸に沿って、指定されたインデックスの前に値を挿入する
delete ある軸の部分配列を削除し、削除後の新しい配列を返す
unique 配列内の一意の要素を検索する

numpy.resize

numpy.resize 関数は、指定されたサイズの新しい配列を返します。

新しい配列のサイズが元のサイズより大きい場合、元の配列の要素のコピーが含まれます。

numpy.resize(arr, shape)

パラメータの説明:

  • arr: サイズを変更する配列
  • shape: 返される配列の新しい形状

例

import numpy as np a = np.array([[1,2,3],[4,5,6]]) print ('1つ目の配列:') print (a) print ('\n') print ('1つ目の配列の形状:') print (a.shape) print ('\n') b = np.resize(a, (3,2)) print ('2つ目の配列:') print (b) print ('\n') print ('2つ目の配列の形状:') print (b.shape) print ('\n') # サイズが大きくなったため、a の最初の行が b で繰り返し出現することに注意 print ('2つ目の配列のサイズを変更:') b = np.resize(a,(3,3)) print (b)

出力結果は次のとおりです。

第一个数组:
[[1 2 3]
 [4 5 6]]


第一个数组的形状:
(2, 3)


第二个数组:
[[1 2]
 [3 4]
 [5 6]]


第二个数组的形状:
(3, 2)


修改第二个数组的大小:
[[1 2 3]
 [4 5 6]
 [1 2 3]]

numpy.append

numpy.append 関数は、配列の末尾に値を追加します。追加操作は配列全体を割り当て、元の配列を新しい配列にコピーします。さらに、入力配列の次元は一致している必要があります。一致しない場合は ValueError が発生します。

append 関数が返すのは常に1次元配列です。

numpy.append(arr, values, axis=None)

パラメータの説明:

  • arr: 入力配列
  • values: 対象のarrに追加する値。次のものと形状が同じである必要がありますarr形状が同じ(追加する軸を除く)
  • axis: デフォルトは None です。axis が未定義の場合、横方向に追加され、戻り値は常に1次元配列です。axis が定義されている場合、それぞれ 0 と 1 の場合です。axis が定義されている場合、それぞれ 0 と 1 の場合です(列数を同じにする必要があります)。axis が 1 の場合、配列は右側に追加されます(行数を同じにする必要があります)。

例

import numpy as np a = np.array([[1,2,3],[4,5,6]]) print ('1つ目の配列:') print (a) print ('\n') print ('配列に要素を追加:') print (np.append(a, [7,8,9])) print ('\n') print ('軸0に沿って要素を追加:') print (np.append(a, [[7,8,9]],axis = 0)) print ('\n') print ('軸1に沿って要素を追加:') print (np.append(a, [[5,5,5],[7,8,9]],axis = 1))

出力結果は次のとおりです。

第一个数组:
[[1 2 3]
 [4 5 6]]


向数组添加元素:
[1 2 3 4 5 6 7 8 9]


沿轴 0 添加元素:
[[1 2 3]
 [4 5 6]
 [7 8 9]]


沿轴 1 添加元素:
[[1 2 3 5 5 5]
 [4 5 6 7 8 9]]

numpy.insert

numpy.insert 関数は、指定されたインデックスの前に、指定された軸に沿って入力配列に値を挿入します。

この関数は、指定された位置(または位置の配列)に指定された値または配列を挿入し、新しい配列を返します。挿入される要素はスカラー値でも配列でもかまいません。挿入操作は新しい配列を返し、元の配列は変更されないことに注意してください。

numpy.insert(arr, obj, values, axis)

パラメータの説明:

  • arr: 入力配列
  • obj: 値を挿入する前のインデックス
  • values: 挿入する値
  • axis: 挿入する軸。指定されない場合、入力配列は平坦化されます

例

import numpy as np a = np.array([[1,2],[3,4],[5,6]]) print ('1つ目の配列:') print (a) print ('\n') print ('Axis パラメータが渡されていません。削除前に入力配列は平坦化されます。') print (np.insert(a,3,[11,12])) print ('\n') print ('Axis パラメータが渡されました。値の配列は入力配列に合わせてブロードキャストされます。') print ('軸0に沿ってブロードキャスト:') print (np.insert(a,1,[11],axis = 0)) print ('\n') print ('軸1に沿ってブロードキャスト:') print (np.insert(a,1,11,axis = 1))

出力結果は次のとおりです。

第一个数组:
[[1 2]
 [3 4]
 [5 6]]


未传递 Axis 参数。 在删除之前输入数组会被展开。
[ 1  2  3 11 12  4  5  6]


传递了 Axis 参数。 会广播值数组来配输入数组。
沿轴 0 广播:
[[ 1  2]
 [11 11]
 [ 3  4]
 [ 5  6]]


沿轴 1 广播:
[[ 1 11  2]
 [ 3 11  4]
 [ 5 11  6]]

numpy.delete

numpy.delete 関数は、入力配列から指定された部分配列を削除した新しい配列を返します。insert() 関数の場合と同様に、軸パラメータが指定されない場合、入力配列は平坦化されます。

Numpy.delete(arr, obj, axis)

パラメータの説明:

  • arr: 入力配列
  • obj: スライス、整数、または整数配列を指定でき、入力配列から削除する部分配列を示します
  • axis: 指定された部分配列を削除する軸。指定されない場合、入力配列は平坦化されます

例

import numpy as np a = np.arange(12).reshape(3,4) print ('1つ目の配列:') print (a) print ('\n') print ('Axis パラメータが渡されていません。挿入前に入力配列は平坦化されます。') print (np.delete(a,5)) print ('\n') print ('2列目を削除:') print (np.delete(a,1,axis = 1)) print ('\n') print ('配列から削除する代替値を含むスライス:') a = np.array([1,2,3,4,5,6,7,8,9,10]) print (np.delete(a, np.s_[::2]))

出力結果は次のとおりです。

第一个数组:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]


未传递 Axis 参数。 在插入之前输入数组会被展开。
[ 0  1  2  3  4  6  7  8  9 10 11]


删除第二列:
[[ 0  2  3]
 [ 4  6  7]
 [ 8 10 11]]


包含从数组中删除的替代值的切片:
[ 2  4  6  8 10]

numpy.unique

numpy.unique 関数は、配列内の重複した要素を取り除くために使用されます。

numpy.unique(arr, return_index, return_inverse, return_counts)
  • arr: 入力配列。1次元配列でない場合は平坦化されます
  • return_index: もしtrue、新しいリストの要素が古いリスト内の位置(インデックス)を返し、リスト形式で格納
  • return_inverse: もしtrue、旧リストの要素が新リスト内の位置(インデックス)を返し、リスト形式で格納します。
  • return_counts:である場合true、重複排除された配列の要素が元の配列に出現する回数を返します。

例

import numpy as np a = np.array([5,2,6,2,7,5,6,8,2,9]) print ('最初の配列:') print (a) print ('\n') print ('最初の配列の重複排除値:') u = np.unique(a) print (u) print ('\n') print ('重複排除配列のインデックス配列:') u,indices = np.unique(a, return_index = True) print (indices) print ('\n') print ('元の配列のインデックスに対応する各値を確認できます:') print (a) print ('\n') print ('重複排除配列のインデックス:') u,indices = np.unique(a,return_inverse = True) print (u) print ('\n') print ('インデックスは:') print (indices) print ('\n') print ('インデックスを使用して元の配列を再構築:') print (u[indices]) print ('\n') print ('重複排除要素の重複数を返します:') u,indices = np.unique(a,return_counts = True) print (u) print (indices)

出力結果は:

第一个数组:
[5 2 6 2 7 5 6 8 2 9]


第一个数组的去重值:
[2 5 6 7 8 9]


去重数组的索引数组:
[1 0 2 4 7 9]


我们可以看到每个和原数组下标对应的数值:
[5 2 6 2 7 5 6 8 2 9]


去重数组的下标:
[2 5 6 7 8 9]


下标为:
[1 0 2 0 3 1 2 4 0 5]


使用下标重构原数组:
[5 2 6 2 7 5 6 8 2 9]


返回去重元素的重复数量:
[2 5 6 7 8 9]
[3 2 2 1 1 1]
その他の拡張