【numpy學習筆記】陣列的建立和基本運算

Datawhale發表於2018-07-10

1. 建立numpy陣列

1.1 通過tuple和list建立陣列

import numpy as np

通過tuple

t=(1,2,3)
a=np.array(t,dtype= 'int')
#array([1, 2, 3])

通過list

list1 = [1,2,3]
a = np.array(list1,dtype='int')
#array([1, 2, 3])

用多個list建立多維陣列

list1 = [1,2,3]
list2 = [4.2,5.1,6.3]
b = np.array([list1,list2])
#array([[1. , 2. , 3. ],
        [4.2, 5.1, 6.3]])
b.dtype
#dtype('float64')

改變dtype

c = np.array( [ [1,2], [3,4] ], dtype=complex )
#array([[1.+0.j, 2.+0.j],
        [3.+0.j, 4.+0.j]])
c.shape
#(2, 2)

1.2 建立特殊陣列

np.zeros([2,4])
#array([[ 0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.]])
np.ones([2,3])
#array([[ 1.,  1.,  1.],
        [ 1.,  1.,  1.]])
np.empty([3,2])
#array([[1., 1.],
        [1., 1.],
        [1., 1.]])
#return a new array of given shape and type, without initializing entries.
np.eye(3)  
#array([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]])
np.arange(2,10,2)
#array([2, 4, 6, 8])
np.linspace(0,10,4) 
#array([ 0., 3.33333333,  6.66666667, 10.])
#4 numbers from 0 to 10 , 等分
np.linspace(0,10,3) 
#array([  0.,   5.,  10.])

2. numpy陣列的基本運算

2.1 算術運算

a = np.array([[1,2,3],[4,5,6]])
#array([[1, 2, 3],
        [4, 5, 6]])

a * a
#array([[ 1,  4,  9],
        [16, 25, 36]])

a ** 3
#array([[  1,   8,  27],
        [ 64, 125, 216]], dtype=int32)

a + a
#array([[ 2,  4,  6],
        [ 8, 10, 12]])
1/a
#array([[1.        , 0.5       , 0.33333333],
        [0.25      , 0.2       , 0.16666667]])

2.2 矩陣運算

A = np.array( [[1,3],[0,1]] )
B = np.array( [[2,2],[3,4]] )
#array([[1, 3],
        [0, 1]])
#array([[2, 2],
        [3, 4]])

矩陣相乘

np.dot(A, B)  #A.dot(B)  
#array([[11, 14],
        [ 3,  4]])
#A*B是元素相乘,兩者不同

矩陣相加

np.add(A, B)
#array([[3, 5],
        [3, 5]])

2.3 其他運算

a = np.random.random([3,3]) 
array([[0.19176092, 0.92224897, 0.61994304],
       [0.80936465, 0.02533119, 0.72779562],
       [0.29421129, 0.35640441, 0.87175173]])
# np.random.random是在[0.0, 1.0) 之間生成隨機數字

a.sum()
4.818811836180757

a.min()
0.025331193574141042

a.max()
0.9222489672128614
np.random.randn(3,3)
array([[ 0.94114569, -1.11281987, -0.16988063],
       [ 0.11768634,  0.16164328, -0.15441487],
       [-0.18021596, -0.46057389, -0.80320574]])
# 以0為中心的高斯分佈
np.random.normal([1,2,3])
array([ 1.49216002,  4.30790776,  2.59977786])
# 正太分佈numpy.random.normal(loc=0.0, scale=1.0, size=None)
b = np.arange(24).reshape(6,4)
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])

# 關於 axis: axis=0 是沿著列操作  axis=1 是沿著行操作
b.sum(axis=0) 
array([60, 66, 72, 78])

b.sum(axis=1)
array([ 6, 22, 38, 54, 70, 86])

b.min(axis=1)
array([ 0,  4,  8, 12, 16, 20])

b.cumsum(axis=1) # 累計相加 cumulative sum along each row
array([[ 0,  1,  3,  6],
       [ 4,  9, 15, 22],
       [ 8, 17, 27, 38],
       [12, 25, 39, 54],
       [16, 33, 51, 70],
       [20, 41, 63, 86]], dtype=int32)

相關文章