Numpy基礎練習的重點記錄

# 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]])

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章