# zeros和ones分別可以創建指定⻓長度或形狀的全0或全1數組。empty可以創建⼀一個沒有任何具體值的數組
import numpy as np
In [29]: np.zeros(10)
Out[29]: array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
In [30]: np.zeros((3, 6))
Out[30]:
array([[ 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0.]])
np.empty((2, 3, 2))
# 輸出爲二維數組、三行、二列
array([[[0., 0.],
[0., 0.],
[0., 0.]],
[[0., 0.],
[0., 0.],
[0., 0.]]])
np.empty((2,3,4))
# 輸出爲二維數組、三行、四列
array([[[1.37930567e-311, 7.65801751e-322, 0.00000000e+000,
0.00000000e+000],
[1.89146896e-307, 1.15998412e-028, 2.44171989e+232,
8.00801729e+159],
[3.28882408e-086, 3.24249361e-086, 3.24249361e-086,
3.24249361e-086]],
[[3.24249361e-086, 3.24249361e-086, 3.24249361e-086,
3.24249361e-086],
[3.24249361e-086, 6.01347002e-154, 3.24249361e-086,
5.79961754e+294],
[1.43267083e+161, 4.56317366e-144, 4.82412328e+228,
1.04718130e-142]]])
對於數組的運算不會改變數組,數組與標量的算術運算會將標量值傳播到各個元素
arr = np.array([[1., 2., 3.],[4., 5., 6.]])
arr
array([[1., 2., 3.],
[4., 5., 6.]])
arr * arr
array([[ 1., 4., 9.],
[16., 25., 36.]])
arr - arr
array([[0., 0., 0.],
[0., 0., 0.]])
1 / arr
array([[1. , 0.5 , 0.33333333],
[0.25 , 0.2 , 0.16666667]])
arr * 0.5
array([[0.5, 1. , 1.5],
[2. , 2.5, 3. ]])
數組之間可以互相比較:
arr2 = np.array([[0., 4., 1.], [7., 2., 12.]])
arr2 > arr
array([[False, True, False],
[ True, False, True]])
數組切片、區間開閉、替換,跟列表的操作很相像。
arr = np.arange(10)
arr
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr[5]
5
arr[5:8]
array([5, 6, 7])
arr[5:8] = 12
arr
array([ 0, 1, 2, 3, 4, 12, 12, 12, 8, 9])
arr_slice = arr[5:8]
arr_slice
array([12, 12, 12])
arr_slice[1] = 12345
arr
array([ 0, 1, 2, 3, 4, 12, 12345, 12, 8,
9])
標量量值和數組都可以被賦值給arr3d[0]
In [79]: old_values = arr3d[0].copy() # 拷貝出值
In [80]: arr3d[0] = 42 # 替換
In [81]: arr3d
Out[81]:
array([[[42, 42, 42],
[42, 42, 42]],
[[ 7, 8, 9],
[10, 11, 12]]])
In [82]: arr3d[0] = old_values # 再次替換
In [83]: arr3d
Out[83]:
array([[[ 1, 2, 3],
[ 4, 5, 6]],
[[ 7, 8, 9],
[10, 11, 12]]])
切片索引,傳入多個切片
arr2d
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
arr2d[:2] # 取0、1
array([[1, 2, 3],
[4, 5, 6]])
arr2d[:2, 1:] # 取0到1的,且從第二位(1)開始之後的所有值
array([[2, 3],
[5, 6]])
將整數索引和切⽚片混合
選取第⼆二⾏行行的前兩列列
In [93]: arr2d[1, :2]
Out[93]: array([4, 5])
選擇第三列列的前兩⾏行行
In [94]: arr2d[:2, 2]
Out[94]: array([3, 6])
只有冒號”表示選取整個軸
In [95]: arr2d[:, :1]
Out[95]:
array([[1],
[4],
[7]])
In [96]: arr2d[:2, 1:] = 0
In [97]: arr2d
Out[97]:
array([[1, 0, 0],
[4, 0, 0],
[7, 8, 9]])