numpy基本操作(5):配列操作
1.配列形状の変更
関数#カンスウ#
説明
データを変更せずに形状を変更
配列要素反復
配列コピーを返します.コピーの変更は元の配列に影響しません.
展開配列を返す
2.配列の反転
関数#カンスウ#
説明
配列を入れ替える次元
指定した軸を後ろにスクロール
配列の2つの軸を入れ替える
3.配列次元の変更
次元#ジゲン#
説明
放送をまねる対象が生まれる
配列を新しいシェイプにブロードキャストする
拡張配列の形状
配列のシェイプから1 Dエントリを削除するには
4.接続配列
関数#カンスウ#
説明
既存の軸に沿った配列シーケンスの接続
新しい軸に沿って一連の配列を追加します.
水平スタックシーケンスの配列(列方向)
垂直スタックシーケンスの配列(行方向)
5.分割配列
関数#カンスウ#
配列および操作
1つの配列を複数のサブ配列に分割
1つの配列を複数のサブ配列に水平に分割(列別)
1つの配列を複数のサブ配列に垂直に分割(行単位)
6.配列要素の追加と削除
関数#カンスウ#
要素と説明
指定したシェイプの新しい配列を返します
配列の末尾に値を追加
指定した軸に沿って値を指定した下付き文字に挿入する前に
ある軸のサブ配列を削除し、削除後の新しい配列を返します.
配列内の一意の要素の検索
参照先:https://www.runoob.com/numpy/numpy-array-manipulation.html
以上、本人の学習過程を記録する
関数#カンスウ#
説明
reshape
データを変更せずに形状を変更
flat
配列要素反復
flatten
配列コピーを返します.コピーの変更は元の配列に影響しません.
ravel
展開配列を返す
import numpy as np
#numpy.reshape
# numpy.reshape(arr, newshape, order='C')
a=np.arange(8)
print(a)
b=a.reshape(4,2)
print(b)
#[0 1 2 3 4 5 6 7]
#[[0 1]
# [2 3]
# [4 5]
# [6 7]]
#numpy.ndarray.flat
a=np.arange(9).reshape(3,3)
for row in a:
print(row)
#[0 1 2]
#[3 4 5]
#[6 7 8]
for element in a.flat:
print(element)
#0
#1
#2
#3
#4
#5
#6
#7
#8
#numpy.ndarray.flatten ,
a=np.arange(8).reshape(2,4)
print(a)
print("
")
#[[0 1 2 3]
# [4 5 6 7]]
print(a.flatten())
print("
")
#[0 1 2 3 4 5 6 7]
print(a.flatten(order="F"))
#[0 4 1 5 2 6 3 7]
#numpy.ravel() , "C ", . :
a=np.arange(8).reshape(2,4)
print(a)
print("
")
#[[0 1 2 3]
# [4 5 6 7]]
print(a.ravel())
print("
")
#[0 1 2 3 4 5 6 7]
print(a.ravel(order="F"))
#[0 4 1 5 2 6 3 7]
2.配列の反転
関数#カンスウ#
説明
transpose
配列を入れ替える次元
ndarray.T
self.transpose()
と同じですrollaxis
指定した軸を後ろにスクロール
swapaxes
配列の2つの軸を入れ替える
import numpy as np
#numpy.transpose , :numpy.transpose(arr, axes)
a=np.arange(12).reshape(3,4)
print(a)
print("
")
print(np.transpose(a))#prine(a.transpose())
#[[ 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:
a = np.arange(12).reshape(3,4)
print (a)
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(arr, axis, start)
a = np.arange(8).reshape(2,2,2)
print(a)
print("
")
#[[[0 1]
# [2 3]]
#
# [[4 5]
# [6 7]]]
print(np.rollaxis(a,2))
print("
")
#[[[0 2]
# [4 6]]
#
# [[1 3]
# [5 7]]]
print(np.rollaxis(a,2,1))
#[[[0 2]
# [1 3]]
#
# [[4 6]
# [5 7]]]
#numpy.swapaxes , :numpy.swapaxes(arr, axis1, axis2)
a = np.arange(8).reshape(2,2,2)
print(a)
print("
")
#[[[0 1]
# [2 3]]
#
# [[4 5]
# [6 7]]]
print (np.swapaxes(a, 2, 0))
#[[[0 4]
# [2 6]]
#
# [[1 5]
# [3 7]]]
3.配列次元の変更
次元#ジゲン#
説明
broadcast
放送をまねる対象が生まれる
broadcast_to
配列を新しいシェイプにブロードキャストする
expand_dims
拡張配列の形状
squeeze
配列のシェイプから1 Dエントリを削除するには
import numpy as np
#numpy.broadcast , , 。
x = np.array([[1], [2], [3]])
y = np.array([4, 5, 6])
b=np.broadcast(x,y)
r,c=b.iters
print(next(r),next(c))
print(next(r),next(c))
print("
")
#1 4
#1 5
print(b.shape)
#(3, 3)
# broadcast x y
b = np.broadcast(x,y)
c=np.empty(b.shape)
print(c.shape)
c.flat=[u+v for (u,v) in b]
print(c)
#(3, 3)
#[[5. 6. 7.]
# [6. 7. 8.]
# [7. 8. 9.]]
# NumPy
print (x + y)
#[[5 6 7]
# [6 7 8]
# [7 8 9]]
#numpy.broadcast_to 。 . .
# NumPy , ValueError.numpy.broadcast_to(array, shape, subok)
a = np.arange(4).reshape(1,4)
print (a)
print (np.broadcast_to(a,(4,4)))
#[[0 1 2 3]]
#[[0 1 2 3]
# [0 1 2 3]
# [0 1 2 3]
# [0 1 2 3]]
#numpy.expand_dims , :numpy.expand_dims(arr, axis)
x = np.array(([1,2],[3,4]))
print(x)
print(x.shape)
y=np.expand_dims(x,axis=0)
print(y)
print(y.shape)
#[[1 2]
# [3 4]]
#(2, 2)
#[[[1 2]
# [3 4]]]
#(1, 2, 2)
y = np.expand_dims(x, axis = 1)
print (y)
print(y.shape)
#[[[1 2]]
#
# [[3 4]]]
#(2, 1, 2)
#numpy.squeeze , :numpy.squeeze(arr, axis)
x = np.arange(9).reshape(1,3,3)
print(x)
print(x.shape)
y=np.squeeze(x)
print(y)
print(y.shape)
#[[[0 1 2]
# [3 4 5]
# [6 7 8]]]
#(1, 3, 3)
#[[0 1 2]
# [3 4 5]
# [6 7 8]]
#(3, 3)
4.接続配列
関数#カンスウ#
説明
concatenate
既存の軸に沿った配列シーケンスの接続
stack
新しい軸に沿って一連の配列を追加します.
hstack
水平スタックシーケンスの配列(列方向)
vstack
垂直スタックシーケンスの配列(行方向)
#numpy.concatenate ,numpy.concatenate((a1, a2, ...), axis)
a = np.array([[1,2],[3,4]])
print (a)
#[[1 2]
# [3 4]]
b = np.array([[5,6],[7,8]])
print (b)
#[[5 6]
# [7 8]]
print (np.concatenate((a,b)))
#[[1 2]
# [3 4]
# [5 6]
# [7 8]]
print (np.concatenate((a,b),axis = 1))
#[[1 2 5 6]
# [3 4 7 8]]
#numpy.stack , :numpy.stack(arrays, axis)
a = np.array([[1,2],[3,4]])
print(a)
#[[1 2]
# [3 4]]
b = np.array([[5,6],[7,8]])
print (b)
#[[5 6]
# [7 8]]
print (np.stack((a,b),0))
#[[[1 2]
# [3 4]]
#
# [[5 6]
# [7 8]]]
print (np.stack((a,b),1))
#[[[1 2]
# [5 6]]
#
# [[3 4]
# [7 8]]]
#numpy.hstack numpy.stack , 。
a = np.array([[1,2],[3,4]])
print (a)
#[[1 2]
# [3 4]]
b = np.array([[5,6],[7,8]])
print (b)
#[[5 6]
# [7 8]]
c = np.hstack((a,b))
print (c)
#[[1 2 5 6]
# [3 4 7 8]]
#numpy.vstack numpy.stack , 。
a = np.array([[1,2],[3,4]])
print (a)
#[[1 2]
# [3 4]]
b = np.array([[5,6],[7,8]])
print (b)
#[[5 6]
# [7 8]]
c = np.vstack((a,b))
print (c)
#[[1 2]
# [3 4]
# [5 6]
# [7 8]]
5.分割配列
関数#カンスウ#
配列および操作
split
1つの配列を複数のサブ配列に分割
hsplit
1つの配列を複数のサブ配列に水平に分割(列別)
vsplit
1つの配列を複数のサブ配列に垂直に分割(行単位)
import numpy as np
#numpy.split , :
#numpy.split(ary, indices_or_sections, axis)
#indices_or_sections: , , , ( )
#axis: , 0, 。 1 ,
a = np.arange(9)
print (a)
#
b = np.split(a,3)
print (b)
#
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])]
#numpy.hsplit , 。
harr = np.floor(10 * np.random.random((2, 6)))
print(harr)
print(np.hsplit(harr, 3))
#[[7. 4. 7. 9. 1. 9.]
# [0. 3. 5. 7. 6. 1.]]
#[array([[7., 4.],
# [0., 3.]]), array([[7., 9.],
# [5., 7.]]), array([[1., 9.],
# [6., 1.]])]
#numpy.vsplit , hsplit 。
a = np.arange(16).reshape(4,4)
print (a)
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]])]
6.配列要素の追加と削除
関数#カンスウ#
要素と説明
resize
指定したシェイプの新しい配列を返します
append
配列の末尾に値を追加
insert
指定した軸に沿って値を指定した下付き文字に挿入する前に
delete
ある軸のサブ配列を削除し、削除後の新しい配列を返します.
unique
配列内の一意の要素の検索
import numpy as np
#numpy.resize 。
# , 。
#numpy.resize(arr, shape)
a = np.array([[1,2,3],[4,5,6]])
print (a)
print (a.shape)
#[[1 2 3]
# [4 5 6]]
#(2, 3)
b = np.resize(a, (3,2))
print (b)
print (b.shape)
#[[1 2]
# [3 4]
# [5 6]]
#(3, 2)
b = np.resize(a,(3,3))
print (b)
#[[1 2 3]
# [4 5 6]
# [1 2 3]]
#numpy.append 。 , 。
# , ValueError。
#append 。
a = np.array([[1,2,3],[4,5,6]])
print (a)
#[[1 2 3]
# [4 5 6]]
print (np.append(a, [7,8,9]))
#[1 2 3 4 5 6 7 8 9]
print (np.append(a, [[7,8,9]],axis = 0))
#[[1 2 3]
# [4 5 6]
# [7 8 9]]
print (np.append(a, [[5,5,5],[7,8,9]],axis = 1))
#[[1 2 3 5 5 5]
# [4 5 6 7 8 9]]
#numpy.insert , 。
# , 。 , 。
# , , 。
#numpy.insert(arr, obj, values, axis)
import numpy as np
a = np.array([[1,2],[3,4],[5,6]])
print (a)
#[[1 2]
# [3 4]
# [5 6]]
print (np.insert(a,3,[11,12]))
#[ 1 2 3 11 12 4 5 6]
# Axis 。
print (np.insert(a,1,[11],axis = 0))
#[[ 1 2]
# [11 11]
# [ 3 4]
# [ 5 6]]
print (np.insert(a,1,11,axis = 1))
#[[ 1 11 2]
# [ 3 11 4]
# [ 5 11 6]]
#numpy.delete 。
# insert() , , 。
#Numpy.delete(arr, obj, axis)
a = np.arange(12).reshape(3,4)
print (a)
#[[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
# Axis 。 。
print (np.delete(a,5))
#[ 0 1 2 3 4 6 7 8 9 10 11]
#
print (np.delete(a,1,axis = 1))
#[[ 0 2 3]
# [ 4 6 7]
# [ 8 10 11]]
#
a = np.array([1,2,3,4,5,6,7,8,9,10])
print (np.delete(a, np.s_[::2]))
#[ 2 4 6 8 10]
#numpy.unique 。
#numpy.unique(arr, return_index, return_inverse, return_counts)
a = np.array([5,2,6,2,7,5,6,8,2,9])
print (a)
#[5 2 6 2 7 5 6 8 2 9]
u = np.unique(a)
print (u)
#[2 5 6 7 8 9]
#
u,indices = np.unique(a, return_index = True)
print (indices)
#[1 0 2 4 7 9]
#
u,indices = np.unique(a,return_inverse = True)
print (u)
print (indices)
#[2 5 6 7 8 9]
#[1 0 2 0 3 1 2 4 0 5]
#
print (u[indices])
#[5 2 6 2 7 5 6 8 2 9]
#
u,indices = np.unique(a,return_counts = True)
print (u)
print (indices)
#[2 5 6 7 8 9]
#[3 2 2 1 1 1]
参照先:https://www.runoob.com/numpy/numpy-array-manipulation.html
以上、本人の学習過程を記録する