PythonでのNumpyライブラリ使用のまとめ

8848 ワード

一、Numpyにおけるndarrayの作成
1、1次元配列と2次元配列の作成
import numpy as np
# numpy      
a = np.array([1, 2, 3])
print(a)
# numpy      
b = np.array([[1, 2, 3],
                [4, 5, 6]])
print(b)

[1 2 3]
[[1 2 3]
 [4 5 6]]

2、ndarray入力パラメータの作成
# numpy       ,         
a = np.array([1, 2, 3, 4])
print(a)
b = np.array((4, 5, 6, 7))
print(b)

[1 2 3 4]
[4 5 6 7]

3、作成時の入力パラメータの種類は同じである
# numpy            ,       ,       。
a = np.array([1, 2, 3.0])
print(a)
print(a.dtype)

[ 1.  2.  3.]
float64

4、npを利用する.arang()関数配列の作成
#   np.arange()    ndarray
#              ,          ,             
a = np.arange(1,100,10)
print(a)

[ 1 11 21 31 41 51 61 71 81 91]

5、すべて0のマトリックスを作成する
#       0   ,          ,          ,dtype        
a = np.zeros ((3,4), dtype=np.int32)
print(a)

[[0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]]

6、すべて1のマトリクスを作成する
#       1   ,     0       。
a = np.ones((4,5), dtype=str)
print(a)

[['1' '1' '1' '1' '1']
 ['1' '1' '1' '1' '1']
 ['1' '1' '1' '1' '1']
 ['1' '1' '1' '1' '1']]

7、指定した要素の個数の行列を作成する
#            ,                   ,          
a = np.linspace( 0, 2, 100)
print(a)

[ 0.          0.02020202  0.04040404  0.06060606  0.08080808  0.1010101
  0.12121212  0.14141414  0.16161616  0.18181818  0.2020202   0.22222222
  0.24242424  0.26262626  0.28282828  0.3030303   0.32323232  0.34343434
  0.36363636  0.38383838  0.4040404   0.42424242  0.44444444  0.46464646
  0.48484848  0.50505051  0.52525253  0.54545455  0.56565657  0.58585859
  0.60606061  0.62626263  0.64646465  0.66666667  0.68686869  0.70707071
  0.72727273  0.74747475  0.76767677  0.78787879  0.80808081  0.82828283
  0.84848485  0.86868687  0.88888889  0.90909091  0.92929293  0.94949495
  0.96969697  0.98989899  1.01010101  1.03030303  1.05050505  1.07070707
  1.09090909  1.11111111  1.13131313  1.15151515  1.17171717  1.19191919
  1.21212121  1.23232323  1.25252525  1.27272727  1.29292929  1.31313131
  1.33333333  1.35353535  1.37373737  1.39393939  1.41414141  1.43434343
  1.45454545  1.47474747  1.49494949  1.51515152  1.53535354  1.55555556
  1.57575758  1.5959596   1.61616162  1.63636364  1.65656566  1.67676768
  1.6969697   1.71717172  1.73737374  1.75757576  1.77777778  1.7979798
  1.81818182  1.83838384  1.85858586  1.87878788  1.8989899   1.91919192
  1.93939394  1.95959596  1.97979798  2.        ]

8、乱数からなる行列を作成する
#   numpy  random    0-1          
a = np.random.random((3,4))
print(a)

[[ 0.98345823  0.22998123  0.3184805   0.35060373]
 [ 0.57452505  0.90753255  0.44305263  0.89099682]
 [ 0.74883429  0.38138843  0.74271146  0.51948479]]

二、Numpyにおける配列のインデックス
1、ndarrayの作成
import numpy as np
a = np.arange(10)
print(a)
print("-------")
b = np.arange(9).reshape(3,3)
print(b)
#          
print(b.ndim)
#         
print(b.dtype.name)
#         
print(b.size)

[0 1 2 3 4 5 6 7 8 9]
-------
[[0 1 2]
 [3 4 5]
 [6 7 8]]
2
int32
9

2、一次元配列の直接索引
#          
print(a[0])

0

3、二次元配列の直接索引
#          
print(b[0][0])
print(b[0,0])

0
0

4、一次元配列のブール索引
#          
print(a>=3)
print(a[a>=3])

[False False False  True  True  True  True  True  True  True]
[3 4 5 6 7 8 9]

5、2 D配列のブール索引
#          ,              
index = (b[:,1] == 4)
print(index)
print(b[index, :])

[False  True False]
[[3 4 5]]

6、論理オペレータの使用
# "&" "|"        ,         ,          
print(a[(a>=3) & (a<=5)])
print(a[(a>=3) | (a<=5)])

[3 4 5]
[0 1 2 3 4 5 6 7 8 9]

三、Numpyの配列のスライス
1、ndarrayの作成
import numpy as np
a = np.arange(10)
print(a)
#      shape
print(a.shape)
#          
print(a.dtype)
print("-------")
#   reshape           
b = np.arange(12).reshape(3,4)
print(b)
#      shape
print(b.shape)
#          
print(b.dtype)

[0 1 2 3 4 5 6 7 8 9]
(10,)
int32
-------
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
(3, 4)
int32

2、一次元配列のスライス
#        ,       ,           
print(a[0:3])
#         
print(a[0:-1])
print(a[0:-2])
#        
print(a[:])

[0 1 2]
[0 1 2 3 4 5 6 7 8]
[0 1 2 3 4 5 6 7]
[0 1 2 3 4 5 6 7 8 9]

3、二次元配列のスライス
#        ,            ","  ,              
print(b[1:4,2:4])
#            
print(b[1:4,2])

[[ 6  7]
 [10 11]]
[ 6 10]

4、多次元配列のスライス
多次元配列のスライス2 D配列のスライスをクラスできます
四、Numpyにおける配列の演算
1、ndarrayの作成
import numpy as np
a = np.arange(10)
b = np.arange(10)
print(a)
print(b)
print("--------")
c = np.array(
            [
            [1, 2, 3],
            [4, 5, 6],
            [7, 8, 9]
            ])
print(c)
print(c.dtype)
print("--------")
#   ndarray     
c = c.astype("float")
print(c)
print(c.dtype)

[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
--------
[[1 2 3]
 [4 5 6]
 [7 8 9]]
int32
--------
[[ 1.  2.  3.]
 [ 4.  5.  6.]
 [ 7.  8.  9.]]
float64

2、一次元配列と一次元配列の演算
#             
#   
print(a+b)
#   
print(a-b)
#   
print(a*b)
#   
print(a.sum())
#   
print(a**2)

[ 0  2  4  6  8 10 12 14 16 18]
[0 0 0 0 0 0 0 0 0 0]
[ 0  1  4  9 16 25 36 49 64 81]
45
[ 0  1  4  9 16 25 36 49 64 81]

3、二次元配列の演算
#        
d = np.array([1, 2, 3])
#     
print(np.dot(d,c))
#                ,axis=0      ,axis=1      #
print(c.sum(axis=0))
print(c.sum(axis=1))

[ 30.  36.  42.]
[ 12.  15.  18.]
[  6.  15.  24.]

4、配列は指数関数とルート番号を求める
#            
print(np.exp(a))
print(np.sqrt(a))

[  1.00000000e+00   2.71828183e+00   7.38905610e+00   2.00855369e+01
   5.45981500e+01   1.48413159e+02   4.03428793e+02   1.09663316e+03
   2.98095799e+03   8.10308393e+03]
[ 0.          1.          1.41421356  1.73205081  2.          2.23606798
  2.44948974  2.64575131  2.82842712  3.        ]

5、配列の重ね合わせ
#      
e = np.arange(9).reshape(3,3)
print(e)
print("---------")
#        ,          
print(np.hstack((c, e)))
#        
print(np.vstack((c, e)))
print("---------")
#          ,          ,        ,        
f = np.tile(a, (3, 1))
print(f)

[[0 1 2]
 [3 4 5]
 [6 7 8]]
---------
[[ 1.  2.  3.  0.  1.  2.]
 [ 4.  5.  6.  3.  4.  5.]
 [ 7.  8.  9.  6.  7.  8.]]
[[ 1.  2.  3.]
 [ 4.  5.  6.]
 [ 7.  8.  9.]
 [ 0.  1.  2.]
 [ 3.  4.  5.]
 [ 6.  7.  8.]]
---------
[[0 1 2 3 4 5 6 7 8 9]
 [0 1 2 3 4 5 6 7 8 9]
 [0 1 2 3 4 5 6 7 8 9]]

6、2 Dまたは多次元配列を1 D配列に展開する
#   #              
print(b.ravel())

[0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9]

7、配列の分割
#      
#      
print(np.vsplit(c, 3))
print("---------")
#      
print(np.hsplit(c, 3))
print("--------")
#         
print(np.vsplit(c, (1,2)))

[array([[ 1.,  2.,  3.]]), array([[ 4.,  5.,  6.]]), array([[ 7.,  8.,  9.]])]
---------
[array([[ 1.],
       [ 4.],
       [ 7.]]), array([[ 2.],
       [ 5.],
       [ 8.]]), array([[ 3.],
       [ 6.],
       [ 9.]])]
--------
[array([[ 1.,  2.,  3.]]), array([[ 4.,  5.,  6.]]), array([[ 7.,  8.,  9.]])]

8、配列の並べ替え
#      
#     
g = np.array(
            [
            [6,4,515],
            [7,98,33]
            ]
            )
print(np.sort(g, axis=1))
print(np.sort(g, axis=0))
print("--------")
#      ,    
t = np.array([3,7,2,53,8])
print(np.argsort(t))
print(t[np.argsort(t)])

[[  4   6 515]
 [  7  33  98]]
[[  6   4  33]
 [  7  98 515]]
--------
[2 0 1 4 3]
[ 2  3  7  8 53]

五、配列のコピー
1、配列の複製
import numpy as np
a = np.arange(10)
print(a)
#  a     b
b = a
#    a b       
print(id(b))
print("---------")
#   b   a      
b.shape = 2,5
print(a.shape)
print("---------")
print(id(b))
print(id(a))

[0 1 2 3 4 5 6 7 8 9]
2443354975488
---------
(2, 5)
---------
2443354975488
2443354975488

2、配列の浅いコピー
#   view         ,  c a       。
c = a.view()
print(c is a)
print(id(a))
print(id(c))
print("-------")
#    c        a    
c[0,0] = 7
print(a)

False
2443354975488
2443354974208
-------
[[7 1 2 3 4]
 [5 6 7 8 9]]

3、配列の深いコピー
#   copy       ,  d    a       。
d = a.copy()
print(id(d))
print(id(a))
print("--------")
#    d        ,a      。
d[0,0]=1111
print(a)
print(d)

2443355026256
2443354975488
--------
[[7 1 2 3 4]
 [5 6 7 8 9]]
[[1111    1    2    3    4]
 [   5    6    7    8    9]]