numpy創建array【老魚學numpy】


在上一篇文章中,我們已經看到了如何通過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個等距點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM