1. 程式人生 > >Numpy學習筆記(三):建立矩陣及運算

Numpy學習筆記(三):建立矩陣及運算

矩陣的變換 #矩陣的形狀變換 改變矩陣的形狀

print(np.arange(15))
a=np.arange(15).reshape(3,5)
a
a.shape
a.ndim#矩陣的維度
a.dtype.name
 a.size

運算結果:

[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
(3, 5)
2
'int32'
15

建立一個全為0的陣列

np.zeros((3,4)) #該函式呼叫必須是元組的形式

運算結果:

array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])

建立一個全為1的陣列

np.ones((2,3,4), dtype=np.int32)

執行結果:

array([[[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]],
       [[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]]])

建立一個定常的陣列

np.arange(10,30,5)

執行結果:

array([10, 15, 20, 25])

建立一個隨機陣列

#numpy中的隨機(權值初始化)
np.random.random((2,3))

執行結果:

array([[0.19481467, 0.26041341, 0.64532866],
       [0.80580031, 0.23305218, 0.30942521]])

建立一個等比例的陣列

#linspace等比例取值
from numpy import pi
np.linspace(0,2*pi,100)

執行結果:

array([0.        , 0.06346652, 0.12693304, 0.19039955, 0.25386607,
       0.31733259, 0.38079911, 0.44426563, 0.50773215, 0.57119866,
       0.63466518, 0.6981317 , 0.76159822, 0.82506474, 0.88853126,
       0.95199777, 1.01546429, 1.07893081, 1.14239733, 1.20586385,
       1.26933037, 1.33279688, 1.3962634 , 1.45972992, 1.52319644,
       1.58666296, 1.65012947, 1.71359599, 1.77706251, 1.84052903,
       1.90399555, 1.96746207, 2.03092858, 2.0943951 , 2.15786162,
       2.22132814, 2.28479466, 2.34826118, 2.41172769, 2.47519421,
       2.53866073, 2.60212725, 2.66559377, 2.72906028, 2.7925268 ,
       2.85599332, 2.91945984, 2.98292636, 3.04639288, 3.10985939,
       3.17332591, 3.23679243, 3.30025895, 3.36372547, 3.42719199,
       3.4906585 , 3.55412502, 3.61759154, 3.68105806, 3.74452458,
       3.8079911 , 3.87145761, 3.93492413, 3.99839065, 4.06185717,
       4.12532369, 4.1887902 , 4.25225672, 4.31572324, 4.37918976,
       4.44265628, 4.5061228 , 4.56958931, 4.63305583, 4.69652235,
       4.75998887, 4.82345539, 4.88692191, 4.95038842, 5.01385494,
       5.07732146, 5.14078798, 5.2042545 , 5.26772102, 5.33118753,
       5.39465405, 5.45812057, 5.52158709, 5.58505361, 5.64852012,
       5.71198664, 5.77545316, 5.83891968, 5.9023862 , 5.96585272,
       6.02931923, 6.09278575, 6.15625227, 6.21971879, 6.28318531])

將矩陣拓展

#.tile的陣列的拓展操作
a =np.arange(0,40,10)
print(a)
b=np.tile(a,(2,2))
print(b)

執行結果:

[ 0 10 20 30]
[[ 0 10 20 30  0 10 20 30]
 [ 0 10 20 30  0 10 20 30]]

矩陣的數學運算

a=np.array([20,30,40,50])
b=np.arange(4)
print(a)
print(b)
c=a-b
print(c)
c=c-1
print(c)
b**2
print(b**2)
print(a<35)

執行結果:

[20 30 40 50]
[0 1 2 3]
[20 29 38 47]
[19 28 37 46]
[0 1 4 9]
[ True  True False False]

對矩陣進行點乘和線性相乘

 A=np.array([[1,1],
              [0,1]])
    B=np.array([[2,0],
              [3,4]])
    print(A)
    print('-'*10)
    print(B)
    print('-'*10)
    print(A*B)#對應元素相乘
    print('-'*10)
    print(A.dot(B))  #按照矩陣乘法來計算
    print('-'*10)
    print(np.dot(A,B))

運算結果

[[1 1]
 [0 1]]
----------
[[2 0]
 [3 4]]
----------
[[2 0]
 [0 4]]
----------
[[5 4]
 [3 4]]
----------
[[5 4]
 [3 4]]

指數和開根號運算

#指數運算
B=np.arange(3)
print(B)
print(np.exp(B))#指數
print(np.sqrt(B))#開根號

運算結果:

[0 1 2]
[1.         2.71828183 7.3890561 ]
[0.         1.         1.41421356]

矩陣的操作

a=np.floor(10*np.random.random((3,4)))#floor向下取整
print(a)
print('-'*10)
print(a.ravel())#把矩陣變成向量
print('-'*10)
a.shape=(6,2)
print('-'*10)
print(a)
print(a.T)  #矩陣的轉置
a.reshape(3,-1)  #將舉證變成自己想要的維度,可以用-1代表自動計算

執行結果:

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

矩陣的拼接:

a=np.floor(10*np.random.random((2,2)))#floor向下取整
b=np.floor(10*np.random.random((2,2)))#floor向下取整
print(a)
print('-'*10)
print(b)
print('-'*10)
print(np.hstack((a,b)))#按照行拼接
print('-'*10)
print(np.vstack((a,b)))#按照縱拼接

運算結果:

[[9. 5.]
 [8. 7.]]
----------
[[3. 1.]
 [5. 0.]]
----------
[[9. 5. 3. 1.]
 [8. 7. 5. 0.]]
----------
[[9. 5.]
 [8. 7.]
 [3. 1.]
 [5. 0.]]

矩陣的切分

#切分
a=np.floor(10*np.random.random((2,12)))#floor向下取整
print(a)
print('-'*10)
print(np.hsplit(a,3))#按照行切分
print('-'*10)
print(np.hsplit(a,(3,4)))#指定位子切
a=np.floor(10*np.random.random((2,12)))#floor向下取整
print(a)
print('-'*10)
np.vsplit(a,3)#橫著切

執行結果:

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