1、普通創建——np.array()
創建數組最簡單的方法就是使用array函數。它接收一切序列型的對象(包括其他數組),然后產生一個新的含有傳入數據的Numpy數組。
1 import numpy as np 2 a1 = np.array([1, 2, 3]) 3 print(a1) 4 a2 = np.array([[1, 2, 3], [2, 3, 4]], dtype=np.float) 5 print(a2, a2.dtype, a2.shape)
運行結果:
import numpy as np a1 = np.array([1, 2, 3]) print(a1) a2 = np.array([[1, 2, 3], [2, 3, 4]], dtype=np.float) print(a2, a2.dtype, a2.shape)
2、內置方法——np.asarray() np.fromiter()
- numpy.asarray # 類似於numpy.array
- numpy.fromiter # 此函數從任何可迭代對象構建一個ndarray對象,返回一個新的一維數組。
2.1 numpy.asarray
語法:
numpy.asarray(a, dtype = None, order = None)
參數:
參數 | 描述 |
---|---|
a | 任意形式的輸入參數,比如列表、列表的元組、元組、元組的元組、元組的列表 |
dtype | 輸入出的數組類型,可選 |
order | ‘C’為按行的 C 風格數組,’F’為按列的 Fortran 風格數組 |
2 x = [1, 2, 3] # x是python的列表類型 不是數組 3 a1 = np.asarray(x) 4 print(a1) # [1 2 3] 5 y = (4, 5, 6) # y是python的元組類型 6 a2 = np.asarray(y, dtype=float, order='F') 7 print(a2) # [4. 5. 6.]
2.2 numpy.formiter
語法:
numpy.fromiter(iterable, dtype, count = -1)
參數:
參數 | 描述 |
---|---|
iterable | 任何可迭代對象 |
dtype | 返回數組的數據類型 |
count | 需要讀取的數據數量,默認為-1,讀取所有數據 |
例子:
1 import numpy as np 2 x = range(5) 3 a = np.fromiter(x, float, 5) 4 print(a)
結果:
[0. 1. 2. 3. 4.]
3 內置方法——np.arange()創建
語法:
numpy.arange(start, stop, step, dtype)
參數:
start 范圍的起始值,默認為0
stop 范圍的終止值(不包含)
step 兩個值的間隔,默認為1
dtype 返回ndarray的數據類型,如果沒有提供,則會使用輸入數據的類型。
例子:
import numpy as np # 普通用法 a1 = np.arange(10) #含起始點 a2 = np.arange(10, 20) # 帶步長 a3 = np.arange(10, 20, 2) # 倒着 a4 = np.arange(20, 10, -1) print(a1, '\n', a2, '\n', a3, '\n', a4)
執行結果:
[0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19] [10 12 14 16 18] [20 19 18 17 16 15 14 13 12 11]
4、內置方法——等比等差創建
4.1 np.linspace (起始值,終止值,元素總數):創建一維等差數組。
語法:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
參數說明:
參數 | 描述 |
---|---|
start |
序列的起始值 |
stop |
序列的終止值,如果endpoint 為true ,該值包含於數列中 |
num |
要生成的等步長的樣本數量,默認為50 |
endpoint |
該值為 ture 時,數列中中包含stop 值,反之不包含,默認是True。 |
retstep |
如果為 True 時,生成的數組中會顯示間距,反之不顯示。 |
dtype |
ndarray 的數據類型 |
例子:
1 import numpy as np 2 a1 = np.linspace(0, 10, 5) 3 print("等差數組:", a1) 4 a2 = np.linspace(0, 10, 5, retstep=True, dtype=np.int8) 5 print(a2) 6 結果: 7 等差數組: [ 0. 2.5 5. 7.5 10. ] 8 (array([ 0, 2, 5, 7, 10], dtype=int8), 2.5
4.2 np.logspace(起始值,終止值,元素總數):創建一維等比數組。
語法:
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
base 參數意思是取對數的時候 log 的下標。
參數 | 描述 |
---|---|
start |
序列的起始值為:base ** start |
stop |
序列的終止值為:base ** stop。如果endpoint 為true ,該值包含於數列中 |
num |
要生成的等步長的樣本數量,默認為50 |
endpoint |
該值為 ture 時,數列中中包含stop 值,反之不包含,默認是True。 |
base |
對數 log 的底數。 |
dtype |
ndarray 的數據類型 |
例子:
1 import numpy as np 2 # 默認底數是 10 3 a = np.logspace(1.0, 2.0, num=10) 4 print(a) 5 # 將對數的底數設為2 6 a = np.logspace(0, 9, 10, base=2) 7 print(a) 8 結果: 9 [ 10. 12.91549665 16.68100537 21.5443469 27.82559402 10 35.93813664 46.41588834 59.94842503 77.42636827 100. ] 11 [ 1. 2. 4. 8. 16. 32. 64. 128. 256. 512.]
5、內置方法創建(特殊構造)
5.1 np.zeros(shape, dtype=float, order='C'):創建一個全0數組,shape要以元組格式傳入
import numpy as np a1 = np.zeros((3, 4), dtype=int) print(a1) a2 = np.zeros_like(a1) print('副本:', a2) # 結果: [[0 0 0 0] [0 0 0 0] [0 0 0 0]] 副本: [[0 0 0 0] [0 0 0 0] [0 0 0 0]]
5.2 np.ones(shape, dtype=None, order='C'):創建一個全1數組,shape要以元組格式傳入。
1 import numpy as np 2 a1 = np.ones((2, 3), dtype=int) 3 # 返回具有與給定數組相同的形狀和類型的數組 4 a2 = np.ones_like(a1) 5 print(a2)
結果:
[[1 1 1]
[1 1 1]]
5.3 np.empty(shape, dtype=None, order='C'):創建一個擁有趨近0值的數組,shape要以元組格式傳入。
1 import numpy as np 2 x = np.empty((2, 3), dtype=int, order='C') 3 print(x) 4 ''' 5 [[7209029 6422625 6619244] 6 [ 100 6553673 0]] 7 '''
5.4 np.eye(N, M=None, k=0, dtype=float, order='C'):創建一個對角矩陣,N代表行,M代表列。其中有個參數k默認值為0,它代表偏移量,正1時向主對角線右上偏移1位,負1時向主對角線左下偏移1位。
1 import numpy as np 2 a1 = np.eye(3, 3, dtype=int) 3 print(a1) 4 # 對角線下移 5 a2 = np.eye(3, 3, k=-1, dtype=int) 6 print('*************************\n', a2) 7 # 對角線向上移 8 a3 = np.eye(3, 3, k=1, dtype=int) 9 print('*************************\n', a3)
結果:
[[1 0 0] [0 1 0] [0 0 1]] ************************* [[0 0 0] [1 0 0] [0 1 0]] ************************* [[0 1 0] [0 0 1] [0 0 0]]
5.5 np.full(shape, fill_value, dtype=None, order='C'):創建一個以fill_value進行填充的數組,fill_value為想要填充的值
import numpy as np a1 = np.full((3, 3),fill_value=5) print(a1) #結果 [[5 5 5] [5 5 5] [5 5 5]]
6、從隨機函數創建
隨機生成數組需要考慮的因素:
- 數據范圍:區間,整數、小數
- 數據分布:均勻分布、正態分布、指定分布
- 數據形狀:size
常用的隨機函數
函數 | 解釋 |
---|---|
rand(d0,d1,…) | [0,1]均勻分布 |
randint(low,high,size) | [low,high)整數均勻分布 |
choice(a,size,replace,p) | 指定數組指定概率分布 |
randn(d0,d1,…) | 標准正態分布 |
[0,1]均勻分布
import numpy as np a1 = np.random.rand(4, 4) print(a1) 》》》 [[0.77052073 0.68006097 0.07924217 0.81588193] [0.99678088 0.3900633 0.64834814 0.62874627] [0.15473904 0.24785919 0.75724866 0.32946373] [0.99667109 0.12276489 0.26126159 0.36696264]] 0.7705207279750877
[a,b)整數均勻分布
1 import numpy as np 2 a = np.random.randint(2, 5, (3, 3)) 3 print(a) 4 >>> 5 [[3 4 2] 6 [4 2 2] 7 [2 4 4]]
指定數組指定概率分布
import numpy as np a = np.random.choice([1, 2, 3, 4], size=(3, 4), replace=True, p=[0.1, 0.2, 0.3, 0.4]) print(a) >>> [[2 2 3 1] [4 4 4 3] [1 2 1 2]]
N(0,1)標准正態分布
1 import numpy as np 2 a = np.random.randn(4, 4) 3 print(a) 4 >>> 5 [[-1.94776705 1.82906205 0.45956222 -1.09130521] 6 [ 1.52936905 -2.38259868 -1.53460647 1.95028102] 7 [ 0.7148325 0.40825257 0.15732141 -0.45423096] 8 [-0.20530692 1.34386361 1.13883039 -0.14897777]]