# 導入numpy
import numpy as np
# 創建數組 array
data1=[6,7,8]
np.array(data1) # 創建一維數組
array([6, 7, 8])
# 創建多維數組
data2=[1,2,3,4],[5,6,7,8]
arr1=np.array(data2)
print(arr1)
[[1 2 3 4]
[5 6 7 8]]
#dtype 數據類型
arr1.dtype
dtype(‘int32’)
arr1.shape #shape屬性
(2, 4)
arr2=np.array(data2,dtype=np.int64)
print(arr2)
print(arr2.dtype)
[[1 2 3 4]
[5 6 7 8]]
int64
#float
data3=[6,7.5,8,9]
arr3=np.array(data3)
print(arr3)
print(arr3.dtype)
[6. 7.5 8. 9. ]
float64
# astype 類型轉換
arr3.astype(np.int64)
array([6, 7, 8, 9], dtype=int64)
# ones 生成全為1的數組
np.ones(10)
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
#zeros 生成全為0的數組
np.zeros(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
# 生成多維數組,三行六列的數組
np.zeros((3,6))
array([[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]])
nd=np.array([1,2,3,4])
print(nd)
[1 2 3 4]
nd*2
array([2, 4, 6, 8])
nd*nd
array([ 1, 4, 9, 16])
nd+nd
array([2, 4, 6, 8])
#取倒數
1/nd
array([1. , 0.5 , 0.33333333, 0.25 ])
# (1)arage方法:range函數的數組版
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
nd1=np.arange(1,10,2) #數組起始數值為1,重點為10,步長為2
print(nd1)
[1 3 5 7 9]
# (2)通過索引獲取部分元素
print(nd1[3])
7
print(nd1[2:5]) # 獲取到的索引為2,3,4,不包括5
[5 7 9]
# (3)通過索引賦值
nd1[2:5]=10
print(nd1)
[ 1 3 10 10 10]
# 多維數組
data2=[[1,2,3,4],[5,6,7,8]]
nd=np.array(data2)
print(nd)
[[1 2 3 4]
[5 6 7 8]]
nd[0] # 代表行索引,二維數組的第一行
array([1, 2, 3, 4])
nd[1]
array([5, 6, 7, 8])
nd[0,3] # 代表第一行,第四列的元素
4
花式索引是一個Numpy術語,指的是利用整數數組進行索引
#(1)reshape
nd=np.arange(32)
print(nd)
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31]
# reshape
nd1=np.reshape(nd,(8,4))
print (nd1)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]
[24 25 26 27]
[28 29 30 31]]
# 常規索引
nd1[0]
array([0, 1, 2, 3])
#(2)選取特定的行子集
# 花式索引,傳入一個數組
#獲取四行,每一個數字代表一行
nd1[[4,6,3,1]]
array([[16, 17, 18, 19],
[24, 25, 26, 27],
[12, 13, 14, 15],
[ 4, 5, 6, 7]])
nd1[[1,5,7,2]]
array([[ 4, 5, 6, 7],
[20, 21, 22, 23],
[28, 29, 30, 31],
[ 8, 9, 10, 11]])
#(3)選取多行、多列交叉處的元素
nd1[[1,5,7,2],[0,3,1,2]] # 第一個值為行索引為1,列索引為0的元素,後面以此類推。實際上獲取的是一些點
array([ 4, 23, 29, 10])
#(4)獲取矩形區域的兩種方法
#方法一:
nd1[[1,5,7,2]] [:,[0,3,1,2]]
array([[ 4, 7, 5, 6],
[20, 23, 21, 22],
[28, 31, 29, 30],
[ 8, 11, 9, 10]])
#方法二:np.ix_
nd1[np.ix_([1,5,7,2],[0,3,1,2])]
array([[ 4, 7, 5, 6],
[20, 23, 21, 22],
[28, 31, 29, 30],
[ 8, 11, 9, 10]])
# ufunc
arr=np.arange(10)
print(arr)
[0 1 2 3 4 5 6 7 8 9]
np.sqrt(arr) # 開根號
array([0. , 1. , 1.41421356, 1.73205081, 2. ,
2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ])
B=np.arange(3)
print(B)
[0 1 2]
C=np.array([2,-1,4])
print(C)
[ 2 -1 4]
np.add(B,C)
array([2, 0, 6])
#maximum
np.maximum(B,C) # 取B,C中同一個index中的最大值,
array([2, 1, 4])