numpy基本操作(5):配列操作

9221 ワード

1.配列形状の変更
関数#カンスウ#
説明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
以上、本人の学習過程を記録する