在上一篇文章中,我們已經看到了如何通過numpy創建numpy中的數組,這里再重復一下:
import numpy as np
# 數組
a = [[1, 2, 3], [4, 5, 6]]
print("a:", a)
# 矩陣
b = np.array(a)
print("b:", b)
執行后輸出為:
a: [[1, 2, 3], [4, 5, 6]]
b: [[1 2 3]
[4 5 6]]
我們可以看到python中的數組和numpy中的數組在屏幕上輸出的一些細微的差異:
numpy中的數組輸出中是按照行列排列的,並且元素之后是沒有逗號分隔的,這樣在屏幕輸出上我們就能很容易看矩陣,跟數學中矩陣的書寫格式比較接近。
我們也可以在創建numpy數組時通過設置dtype來指定數組中元素的類型,例如:
import numpy as np
# python數組
a = [[1, 2, 3], [4, 5, 6]]
print("a:", a)
# numpy數組
b = np.array(a, dtype=np.float)
print("b:", b)
上面我們就定義了numpy數組元素的類型為float類型,其輸出為:
a: [[1, 2, 3], [4, 5, 6]]
b: [[ 1. 2. 3.]
[ 4. 5. 6.]]
在機器學習中,一般我們定義的元素類型為浮點類型np.float和整型np.int。
全0矩陣
想要輸出3行4列全部為0的numpy二維數組:
import numpy as np
a = np.zeros((3,4))
print(a)
輸出為:
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
全1數組
我們也經常會用到全1的數組:
import numpy as np
a = np.ones((3, 4), dtype=np.float)
print(a)
輸出為:
[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]
有人可能會注意到定義幾行幾列的方法,例如(3, 4),這個是python中的元組類型,本質上就是一個數組,但跟數組不一樣的地方是其值是只讀的,也就是不可改變元組中元素的值。
生成接近於0的數組
import numpy as np
a = np.empty((3, 4), np.float)
print(a)
輸出為:
[[ 6.23042070e-307 3.56043053e-307 1.37961641e-306 2.22518251e-306]
[ 1.33511969e-306 1.24610383e-306 1.69118108e-306 8.06632139e-308]
[ 1.20160711e-306 1.69119330e-306 1.29062229e-306 1.29060531e-306]]
np.empty()用於生成接近於0的隨機數數組。
生成有序的數列或數組
例如:生成一個從10開始到20結束(不包括結束值),步長為2的數列:
import numpy as np
a = np.arange(10, 20, 2)
print(a)
輸出為:
[10 12 14 16 18]
np.arange()還是經常會用到的,看到這個函數,使我聯想起python中的range函數,這兩者的功能類似,先看個例子:
import numpy as np
# python中創建range對象,然后我們把它轉換成list對象並打印出來
a = range(10, 20, 2)
print("python中的range對象:", list(a))
# numpy中的arange函數跟python中的range對象類似
b = np.arange(10, 20, 2)
print("numpy中的arange:", b)
輸出為:
python中的range對象: [10, 12, 14, 16, 18]
numpy中的arange: [10 12 14 16 18]
這里arange可以記憶為array中的range函數。
改變數組形狀
numpy數組的形狀非常重要,也就是幾行幾列。
在進行數組/矩陣運算中要時刻關注數組/矩陣是什么樣的形狀,比如數組/矩陣的加法、數組/矩陣的叉乘中對其形狀都有相應較嚴格的規定。
有時為了能夠改變數組/矩陣的形狀,就需要調用np.reshape()的函數。
例如:
import numpy as np
a = np.arange(12).reshape(3, 4)
print(a)
輸出為:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
生成線段
import numpy as np
a = np.linspace(1, 10, 20)
print(a)
輸出為:
[ 1. 1.47368421 1.94736842 2.42105263 2.89473684
3.36842105 3.84210526 4.31578947 4.78947368 5.26315789
5.73684211 6.21052632 6.68421053 7.15789474 7.63157895
8.10526316 8.57894737 9.05263158 9.52631579 10. ]
上述語句生成了從1開始到10,總共有20個數等距的數列。
你可以把它們想象成起始是1,終止是10,總共有20個等距點。