1. 程式人生 > >Python | Numpy | 初始化,維度,資料型別,複製,取值賦值

Python | Numpy | 初始化,維度,資料型別,複製,取值賦值

初始化

1、從list初始化一個ndarray

arr = np.array([1, 2, 3])   #list轉ndarry
li =arr.tolist()            #ndarry轉list
print(type(arr),type(li))
<class 'numpy.ndarray'> <class 'list'>

2、通過內建函式初始化

arr = np.zeros((2, 3))      #初始化一個2*3的元素全為0的陣列
arr = np.ones((1, 2))       #初始化一個1*2的元素全為1的陣列
arr = np.full((2, 2), 8)    #初始化一個2*2的元素全為8的陣列
arr = np.eye(3)              #初始化一個3*3 的對角線元素為1,其餘全為0的陣列(單位矩陣)
arr = np.random.random((3, 2))  #初始化一個3*2的,填充任意數字的陣列
arr = np.empty((2, 3, 4))     #初始化一個2*3*4的陣列,不填充

檢視陣列的維度

arr = np.array([[1, 2, 3],[4, 5, 6]])
print(arr,'\n\n' ,arr.shape)
[[1 2 3]
 [4 5 6]] 

 (2, 3)

定義及檢視陣列中資料的型別

numpy在初始化陣列時會自動匹配合適的型別,但也可指定

arr1 = np.array([[1, 2, 3],[4, 5, 6]])
arr2 = np.array([[1, 2, 3],[4, 5, 6]],dtype=np.float)  #指定資料型別為float
print(arr1,'\n' ,arr1.dtype)    #檢視arr1的資料的型別
print()
print(arr2,'\n' ,arr2.dtype)   #檢視arr2的資料的型別
[[1 2 3]
 [4 5 6]] 
 int32

[[1. 2. 3.]
 [4. 5. 6.]] 
 float64

使用astype()複製陣列並轉換資料型別

arr = np.array([[1, 2, 3],[4, 5, 6]])
float_arr = arr.astype(np.float64)
print(arr.dtype,float_arr.dtype)
int32  float64

注:使用astype()將float轉換為int時,小數部分將被捨棄

      字串型別的數字可轉為數值型,有其他字元則會報錯

     astype()使用其他陣列型別作為引數

int_arr = np.array([1, 2, 3])
float_arr = np.array([1.2, 2.5, 6.1])
print(float_arr.astype(dtype=int_arr.dtype))
[1 2 6]

陣列內元素取值和賦值

1、像list一樣切片

     (注意切片結果不同)

a = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
b = a[1,:]        #[4 5 6]
c = a[1:2,:]      #[[4 5 6]]
d = a[[1],:]     #[[4 5 6]]

   注意此時相當於引用,修改b、c、d的值都會修改a

c[0][0] += 10
print(c,'\n\n',a)
[[14  5  6]] 

 [[ 1  2  3]
 [14  5  6]
 [ 7  8  9]]

若不想使用引用,則應使用copy():

a = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
c = a[1:2,:].copy()      #[[4 5 6]]
c[0][0] += 10
print(c,'\n\n',a)
[[14  5  6]] 

 [[1 2 3]
 [4 5 6]
 [7 8 9]]

2、更靈活的方法

a = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
b = a[[0, 1, 2],[1, 0, 2]]  
print(a,'\n\n',b)
[[1 2 3]
 [4 5 6]
 [7 8 9]] 

 [2 4 9]

3、條件判斷

a = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
print(a[a>2])

#上面相當於:
bool_index = (a > 2)  #定義一個bool索引
print(a[bool_index])
[3 4 5 6 7 8 9]
[3 4 5 6 7 8 9]
   但是這樣會損失維度資訊