匯入numpy
import numpy as np #使用np來簡化輸入名稱
Numpy數(shù)據(jù)類型
-
每個python內(nèi)建類型都有一個唯一定義它的字符代碼:
'b':布爾值
'i':符號整數(shù)
'u':無符號整數(shù)
'f':浮點
'c':複數(shù)浮點
'm':時間間隔
'M':日期時間
'O':Python 對象
'S', 'a':字節(jié)串
'U':Unicode
'V':原始數(shù)據(jù)(void)
第一個字符指定數(shù)據(jù)的類型,其餘字符指定每個項目的字節(jié)數(shù)内颗,Unicode除外念秧,其中它被解釋為字符數(shù)。項目大小必須對應(yīng)於現(xiàn)有類型姨夹,否則將出現(xiàn)錯誤夸溶。
前綴<或>吴旋。<是小端(最小有效字節(jié)存儲在最小地址中)损肛。>是大端(最大有效字節(jié)存儲在最小地址中)厢破。
import numpy as np
a = np.dtype('<i2')
a1 = np.array([32766,32768],dtype=a)
b = np.dtype('>i2')
b1 = np.array([32766,32768],dtype=b)
print('i2內(nèi)建數(shù)據(jù)類型:','\n<i2:',a,'\n>i2:',b,'\n32768超過i2大小->溢位:','\na1:',a1,'\nb1:',b1)
i2內(nèi)建數(shù)據(jù)類型:
<i2: int16
>i2: >i2
32768超過i2大小->溢位:
a1: [ 32766 -32768]
b1: [ 32766 -32768]
-
NumPy 數(shù)字類型是dtype對象的實例:
自定義dtype數(shù)據(jù)類型:
- 方法一
import numpy as np
student = np.dtype([('name','S20'), ('age', 'i1'), ('student_ID', 'i4')])
Department_of_Chemistry_student = np.array([('jeff', 21, 50),('dora', 18, 75)], dtype = student)
print('學(xué)生結(jié)構(gòu):\n',student)
print('化學(xué)系學(xué)生的名子:\n',Department_of_Chemistry_student['name'],'\n化學(xué)系學(xué)生的年齡:\n',Department_of_Chemistry_student['age'])
print('索引0的學(xué)生資料:\n',Department_of_Chemistry_student[0])
學(xué)生結(jié)構(gòu):
[('name', 'S20'), ('age', 'i1'), ('student_ID', '<i4')]
化學(xué)系學(xué)生的名子:
[b'jeff' b'dora']
化學(xué)系學(xué)生的年齡:
[21 18]
索引0的學(xué)生資料:
(b'jeff', 21, 50)
- 方法二
import numpy as np
new_student = np.dtype({
'names':['name','age','weight(kg)','height(cm)'],
'formats':['S30','i','f','f']}, align=True)
new_Department_of_Chemistry_student = np.array([('Zhang',32,72.5,167),
('Wang',24,65,170)],dtype=new_student)
print('學(xué)生結(jié)構(gòu):\n',new_student)
print('化學(xué)系學(xué)生的名子:\n',new_Department_of_Chemistry_student['name'],'\n化學(xué)系學(xué)生的年齡:\n',new_Department_of_Chemistry_student['age'])
學(xué)生結(jié)構(gòu):
{'names':['name','age','weight(kg)','height(cm)'], 'formats':['S30','<i4','<f4','<f4'], 'offsets':[0,32,36,40], 'itemsize':44, 'aligned':True}
化學(xué)系學(xué)生的名子:
[b'Zhang' b'Wang']
化學(xué)系學(xué)生的年齡:
[32 24]offsets:
結(jié)構(gòu)數(shù)據(jù)的byte偏移量,S以4byte為單位(30視為32)治拿,'i4'=32bit=4byte摩泪,'f4'=32bit=4byte
itemsize:
結(jié)構(gòu)數(shù)據(jù)的總大小(byte)
aligned:
數(shù)據(jù)是否對齊
-
NumPy字節(jié)(byte順序)交換
numpy.ndarray.byteswap()函數(shù)在兩個表示之間切換:bigendian(大端)和little-endian(小端)。
import numpy as np
a = np.array([1, 256, 8755], dtype = np.int16)
print('數(shù)組:\n',a)
print('十六進制表示記憶體中的資料:')
print(np.array([hex(a[j])for j in range(3)]))
print('\n數(shù)組(調(diào)用byteswap()函數(shù)後):')
print(a.byteswap(True))
print('十六進制表示記憶體中的資料:')
print(np.array([hex(a[j])for j in range(3)]))
數(shù)組:
[ 1 256 8755]
十六進制表示記憶體中的資料:
['0x1' '0x100' '0x2233']
數(shù)組(調(diào)用byteswap()函數(shù)後):
[ 256 1 13090]
十六進制表示記憶體中的資料:
['0x100' '0x1' '0x3322']
-
數(shù)據(jù)類型轉(zhuǎn)換
astype( )函數(shù)
import numpy as np
a = np.array([10,20,30],dtype=np.int32)
print('dtype:',a.dtype,'a:',a)
b = a.astype(np.float32)
print('dtype:',b.dtype,'b:',b)
dtype: int32 a: [10 20 30]
dtype: float32 b: [10. 20. 30.]
補充:缺省值(NaN)
數(shù)組
數(shù)組基本概念
-
python list與numpy.array差異
python list儲存的是python變數(shù)忍啤,而python變數(shù)並不像C語言一樣有指定資料型態(tài)來固定儲存的空間大小加勤,python變數(shù)是一組指向複合式C語言結(jié)構(gòu)的指標(biāo),所以python變數(shù)可以指定變數(shù)為任意資料型態(tài)同波,使用起來較為方便鳄梅,但在處理大型運算時效能相當(dāng)?shù)牟睿藭r我們會改用numpy.array來固定資料型態(tài)(dtype)與儲存的空間大小未檩,從而增加運算效率戴尸。
shape數(shù)組的形狀,zero matrix shape = (2,1,3)冤狡,[ [ [0, 0, 0] ],[ [0, 0, 0] ] ]孙蒙,越左邊的數(shù)字越外層,由內(nèi)往外疊加悲雳。
ex. zero matrix shape = (2,1) = [ [0],[0] ] =。
ex. zero matrix shape = (2,2) = [ [0,0] , [0,0] ] =坦胶。
建立矩陣
- np.array():由list建立矩陣
list1 = [[1,2,3],[4,5,6],(7,8,9)]
data0 = np.array(list1,dtype=np.float32)
print('data0:\n',data0)
data1 = np.array([[10,11,12],[13,14,15]],dtype=np.int)
print('data1:\n',data1)
data0:
[[1. 2. 3.]
[4. 5. 6.]
[7. 8. 9.]]
data1:
[[10 11 12]
[13 14 15]]
- zero():建立零矩陣
np.zeros((2,10),dtype=int)
array([
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
])
- ones():建立全為1的矩陣
np.ones((2,10),dtype=int)
array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
- np.full():建立全為任意數(shù)的矩陣
np.full((2,4),0.98,dtype=float)
array([[0.98, 0.98, 0.98, 0.98],
[0.98, 0.98, 0.98, 0.98]])
- np.linspace():建立固定數(shù)量平均分佈於兩值之間 ●----●
np.linspace(0,10,5)
array([ 0. , 2.5, 5. , 7.5, 10. ])
- np.arange():建立固定間隔依序填滿矩陣 ●----○
np.arange(0,10,2)
array([0, 2, 4, 6, 8])
- np.eye():建立單位矩陣
np.eye(3)
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
- np.empty():建立未初始化矩陣(值不固定,值為原記憶體中的值)
np.empty((2,2))
array([[ 2.5, 5. ],
[ 7.5, 10. ]])
empty_like(prototype[, dtype, order, subok]) | 將數(shù)組轉(zhuǎn)成empty形式 |
ones_like(a[, dtype, order, subok]) | 將數(shù)組轉(zhuǎn)成ones形式 |
zeros_like(a[, dtype, order, subok]) | 將數(shù)組轉(zhuǎn)成zeros形式 |
full_like(a, fill_value[, dtype, order, subok]) | 將數(shù)組轉(zhuǎn)成full形式 |
數(shù)組的屬性
a = np.array([[1,2,3],[4,5,6]])
print('a:',a)
print('ndim(維度):',a.ndim)
print('shape(形狀):',a.shape)
print('dtype(類型):',a.dtype)
print('size(元素數(shù)量):',a.size)
print('nbytes(int32*6=24byte):',a.nbytes)
print('itemsize(元素byte數(shù)):',a.itemsize)
a: [[1 2 3]
[4 5 6]]
ndim(維度): 2
shape(形狀): (2, 3)
dtype(類型): int32
size(元素數(shù)量): 6
nbytes(int32*6=24byte): 24
itemsize(元素byte數(shù)): 4
ufunc
通用函數(shù)(或簡稱為ufunc)是一種ndarrays
以逐元素方式運行的函數(shù)晴楔,支持陣列廣播顿苇,類型轉(zhuǎn)換和其他一些標(biāo)準(zhǔn)功能。也就是說税弃,ufunc是一個函數(shù)的“ 矢量化 ”包裝器纪岁,它接受固定數(shù)量的特定輸入並產(chǎn)生固定數(shù)量的特定輸出。
-
ufunc.reduce()
-
ufunc.accumulate()
-
ufunc.reduceat()
-
ufunc.outer()
-
ufunc.at()
ufunc.reduce(a[, axis, dtype, out, keepdims]) | 減少一個接一個的尺寸则果,由沿一個軸施加ufunc幔翰。 |
ufunc.accumulate(array[, axis, dtype, out]) | 累計將運算符應(yīng)用於所有元素的結(jié)果。 |
ufunc.reduceat(a, indices[, axis, dtype, out]) | 在單個軸上使用指定切片執(zhí)行(局部)縮減西壮。 |
ufunc.outer(A, B, **kwargs) | 應(yīng)用ufunc 運到所有對(a导匣,b)用在甲和b在乙。 |
ufunc.at(a, indices[, b]) | 對'index'指定的元素在操作數(shù)'a'上執(zhí)行無緩衝的就地操作茸时。 |
匯入數(shù)組
array(object[, dtype, copy, order, subok, ndmin]) | 創(chuàng)建一個數(shù)組。 |
---|---|
asarray(a[, dtype, order]) | 將輸入轉(zhuǎn)換為數(shù)組赋访。 |
asanyarray(a[, dtype, order]) | 將輸入轉(zhuǎn)換為ndarray可都,但通過ndarray子類缓待。 |
ascontiguousarray(a[, dtype]) | 在內(nèi)存中返回一個連續(xù)的數(shù)組(C順序)。 |
asmatrix(data[, dtype]) | 將輸入解釋為矩陣渠牲。 |
copy(a[, order]) | 返回給定對象的數(shù)組副本旋炒。 |
frombuffer(buffer[, dtype, count, offset]) | 將緩衝區(qū)解釋為一維數(shù)組。 |
fromfile(file[, dtype, count, sep]) | 根據(jù)文本或二進製文件中的數(shù)據(jù)構(gòu)造數(shù)組签杈。 |
fromfunction(function, shape, **kwargs) | 通過在每個坐標(biāo)上執(zhí)行函數(shù)來構(gòu)造數(shù)組瘫镇。 |
fromiter(iterable, dtype[, count]) | 從可迭代對象創(chuàng)建新的1維數(shù)組。 |
fromstring(string[, dtype, count, sep]) | 從字符串中的文本數(shù)據(jù)初始化的新1-D數(shù)組答姥。 |
loadtxt(fname[, dtype, comments, delimiter, …]) | 從文本文件加載數(shù)據(jù)铣除。 |
隨機數(shù)(亂數(shù))
- 隨機數(shù)種子
- 隨機數(shù)是由隨機數(shù)種子根據(jù)一定的計算方法計算出來的數(shù)值。只要計算方法固定鹦付,隨機種子固定尚粘,那麼產(chǎn)生的隨機數(shù)就固定。
- python與numpy默認情況下隨機數(shù)種子來自系統(tǒng)時鐘
- 隨機生成器
np.random.seed(1)
z0 = np.random.randint(0,10,10)
z1 = np.random.randint(0,10,10)
print('seed(1):')
print('z0:',z0)
print('z1:',z1)
np.random.seed(1)
z2 = np.random.randint(0,10,10)
z3 = np.random.randint(0,10,10)
print('seed(1):')
print('z2:',z2)
print('z3:',z3)
np.random.seed()
print('seed():')
z4 = np.random.randint(0,10,10)
z5 = np.random.randint(0,10,10)
print('z4:',z4)
print('z5:',z5)
seed(1):
z0: [5 8 9 5 0 0 1 7 6 9]
z1: [2 4 5 2 4 2 4 7 7 9]
seed(1):
z2: [5 8 9 5 0 0 1 7 6 9]
z3: [2 4 5 2 4 2 4 7 7 9]
seed():
z4: [0 5 4 3 4 0 0 6 8 8]
z5: [9 8 1 5 3 3 3 7 7 1]
Random generator | |
---|---|
RandomState | Mersenne Twister偽隨機數(shù)發(fā)生器的容器敲长。 |
seed([seed]) | 種子郎嫁。 |
get_state() | 返回表示生成器內(nèi)部狀態(tài)的元組。 |
set_state(state) | 從元組設(shè)置生成器的內(nèi)部狀態(tài)祈噪。 |
- 簡單隨機數(shù)
Simple random data | |
---|---|
rand(d0, d1, ..., dn) | 給定形狀的隨機值泽铛。 |
randn(d0, d1, ..., dn) | 從“標(biāo)準(zhǔn)正態(tài)”分佈中返回一個樣本(或樣本)。 |
randint(low[, high, size, dtype]) | 將隨機整數(shù)從低(包含)返回到高(不包括)辑鲤】唬●----○ |
random_integers(low[, high, size]) | np.int類型的隨機整數(shù)介於低和高之間,包括在內(nèi)遂填〔酰●----● |
random_sample([size]) | 在半開區(qū)間[0.0,1.0]中返回隨機浮點數(shù)。 |
random([size]) | 在半開區(qū)間[0.0,1.0]中返回隨機浮點數(shù)吓坚。 |
ranf([size]) | 在半開區(qū)間[0.0,1.0]中返回隨機浮點數(shù)撵幽。 |
sample([size]) | 在半開區(qū)間[0.0,1.0]中返回隨機浮點數(shù)。 |
choice(a[, size, replace, p]) | 從給定的1-D陣列生成隨機樣本礁击,可設(shè)置不重複取樣盐杂。 |
bytes(length) | 返回隨機字節(jié)。 |
- 分佈函數(shù)
- 排序
Permutations | |
---|---|
shuffle(x) | 通過改組其內(nèi)容來就地修改序列。 |
permutation(x) | 隨機置換序列韵洋,或返回置換範(fàn)圍竿刁。 |
-
隨機數(shù)應(yīng)用
模擬由lognormal分佈10000群體中隨機抽取35個樣本重複1000次,觀察群體參數(shù)與樣本統(tǒng)計量以及非常態(tài)分怖群體是否接近卡方分佈與T分佈搪缨。
import numpy as np
import matplotlib.pyplot as plt
population = 10000
sample_num = 35
sampling_num = 1000
np.random.seed(1)
# z = np.random.uniform(0,100,(population))
a = np.round(np.random.lognormal(1,1,(population))+8,2) #population個lognormal隨機分佈(μ=1,σ=1)值食拜,取小數(shù)以下2位,
np.random.seed()
data1 = np.zeros((sampling_num,sample_num))
for num in range(sampling_num):
data1[num] = [a[choice1] for choice1 in np.random.choice(population,sample_num,replace=False)]
s_std = np.array([np.std(data1[num],ddof= 1) for num in range(sampling_num)])
s_Var = s_std**2
s_mean = np.array([np.mean(data1[num]) for num in range(sampling_num)])
p_std = np.std(a,ddof= 0)
p_Var = p_std**2
p_mean = np.mean(a)
chi_square = (s_Var*(sample_num-1))/(p_Var)
t_student = (s_mean-p_mean)/(s_std/(np.sqrt(sample_num)))
# my_x_ticks = np.arange(0, 15, 1)
plt.xlim((0, 80))
plt.hist((a), # 繪圖數(shù)據(jù)
bins = 100, # 指定直方圖的條形數(shù)為20個
color = 'steelblue', # 指定填充色
edgecolor = 'k', # 指定直方圖的邊界色
label = '直方圖' )# 為直方圖呈現(xiàn)標(biāo)簽
plt.show()
plt.xlim((0, 80))
plt.hist((s_Var), # 繪圖數(shù)據(jù)
bins = 200, # 指定直方圖的條形數(shù)為20個
color = 'steelblue', # 指定填充色
edgecolor = 'k', # 指定直方圖的邊界色
label = '直方圖' )# 為直方圖呈現(xiàn)標(biāo)簽
plt.show()
# plt.xlim((0, 80))
plt.hist((s_mean), # 繪圖數(shù)據(jù)
bins = 100, # 指定直方圖的條形數(shù)為20個
color = 'steelblue', # 指定填充色
edgecolor = 'k', # 指定直方圖的邊界色
label = '直方圖' )# 為直方圖呈現(xiàn)標(biāo)簽
plt.show()
# plt.xlim((0, 80))
plt.hist((t_student), # 繪圖數(shù)據(jù)
bins = 50, # 指定直方圖的條形數(shù)為20個
color = 'steelblue', # 指定填充色
edgecolor = 'k', # 指定直方圖的邊界色
label = '直方圖' )# 為直方圖呈現(xiàn)標(biāo)簽
plt.show()
plt.hist((chi_square), # 繪圖數(shù)據(jù)
bins = 50, # 指定直方圖的條形數(shù)為20個
color = 'steelblue', # 指定填充色
edgecolor = 'k', # 指定直方圖的邊界色
label = '直方圖' )# 為直方圖呈現(xiàn)標(biāo)簽
plt.show()
Numpy日期
-
建立
範(fàn)例1範(fàn)例2範(fàn)例3範(fàn)例4 -
運算
範(fàn)例
-
日期時間單位
日期時間單位 -
定義工作日的掩碼
工作日的掩碼(默認是六日為假日) -
營業(yè)日功能
往後偏移幾個工作日(06/25副编、06/26為假日)若輸入日期為假日需加入forward or backward規(guī)則計算母親節(jié)(forward到第一個星期日再偏移到第2個)