python包介绍:numpy
1 ndarray
相比于python中的list,ndarray的核心優(yōu)勢就是運算快
Numpy?喜歡用電腦內(nèi)存中連續(xù)的一塊物理地址存儲數(shù)據(jù)
?Python?的?List?并不是連續(xù)存儲的,它的數(shù)據(jù)是分散在不同的物理空間(list中的類型可以是不一樣的)
1.1 創(chuàng)建
np.array(object,dtype=…) | 用object創(chuàng)建ndarray ? | ||||||
empty(shape,dtype=)empty_like(data) | 指定形狀&類型,元素值均為隨機值 | ||||||
zeros(shape,dtype=)zeros_like(data) | 填充0 | ||||||
onesones_like(data) | 填充1 | ||||||
full(shape,num,dtype)full_like(data,num) | 用num填充shape大小的數(shù)組 | ||||||
eye(num,dtype)等同于identity(num,dtype) | num*num的單位矩陣 | ||||||
random.random(shape,dtype) | |||||||
numpy.random.normal(loc,scale,size) | 正態(tài)分布
| ||||||
diag | 當(dāng)?np.diag(array)?中 array是一個1維數(shù)組時,結(jié)果形成一個以一維數(shù)組為對角線元素的矩陣 array是一個二維矩陣時,結(jié)果輸出矩陣的對角線元素 | ||||||
empty_like(x) | 創(chuàng)建一個形狀和x一樣的,數(shù)值隨機 | ||||||
arange(start, stop, step, dtype) | ?? | ||||||
linspace | 創(chuàng)建一個等差數(shù)列 ? ? | ||||||
logspace | 創(chuàng)建一個等比數(shù)列 ? |
?1.2?ndarray 屬性
ndim | 矩陣維數(shù) | |
shape | 數(shù)組的維度(元組形式)【用reshape調(diào)整大小】 | |
itemsize | 一個元素的大小(占幾個字節(jié)) | |
real | 元素的實部 | |
imag | 元素的虛部 | |
dtype | 數(shù)據(jù)類型 | |
size | 元素個數(shù) |
1.3 切片
| a[start:end:step] | 左閉右開 |
| a[…,x]——第x+1列 a[x,…]——第x+1行 | |
| a[[list1],[list2]] | 獲取 (list1[0].list2[0]) (list1[1].list2[1]) (list1[2].list2[2]) ….等索引位置的數(shù)據(jù) ? |
| a[list] | 獲取list中這幾行元素 |
| a[np.ix_([list1],[list2])] | 獲取第list1行的第list2列的數(shù)據(jù) ? |
1.3.1 切片的性質(zhì)?
切片是原來的array的一個視圖,修改切片的話,原來的也改變了
!!!記住結(jié)論:!!!
如果是數(shù)字/帶數(shù)字的':'來切片的話,不論是不是有塌縮(類似于r1那樣的變成一維的)都是原來的的一個view,元素修改了就一起修改了
如果是數(shù)組這樣的索引切片的話(注:元組tuple不行),那么就是copy不是view了
如果是混合的(一個數(shù)組,一個純數(shù)字),那么就是copy(因為有數(shù)組切片了)
import numpy as np a=np.array([[1,2,3],[3,4,5],[7,8,9]]) b=a[1,:] c=a[[1],:] d=a[1:2,:] print(a,'\n',b,c,d) ''' [[1 2 3][3 4 5][7 8 9]] [3 4 5] [[3 4 5]] [[3 4 5]] ''' b[1]=10 print(a,'\n',b,c,d) ''' [[ 1 2 3][ 3 10 5][ 7 8 9]] [ 3 10 5] [[3 4 5]] [[ 3 10 5]] '''?1.4 布爾索引
?
?
?2? 數(shù)組運算
?執(zhí)行數(shù)組的運算必須有相同的行列/符合廣播規(guī)則
2.1 相同行列
相同行列:對應(yīng)元素加減乘除
?
?
2.2 廣播原則?
?當(dāng)運算中的 2 個數(shù)組的形狀不同時,numpy 將自動觸發(fā)廣播機制
2.2.1 數(shù)組+標(biāo)量
?
?
?2.2.2 數(shù)組+行/列
?
3 內(nèi)積外積與矩陣乘法?
?3.1 外積
?
?3.2 內(nèi)積
內(nèi)積——inner/dot
?np.dot(a,b)等價于a.dot(b)
inner用法和dot稍有不同:?np.dot(a, b)= np.inner(a, b.T),相當(dāng)于b做一次轉(zhuǎn)置
3.3 乘法
matmul/@/dot
?4 函數(shù)
all | 矩陣中元素是否全部非零 | ||||||||||||||||||
any | 矩陣中是否有元素非零 | ||||||||||||||||||
argmax/argmin | 第幾維度的最大最小值的坐標(biāo) Argmax[0]:對每一個a[…][0][0],a[…][0][1],a[…][0][2] a[…][1][0],a[…][1][1],a[…][1][2]找一個最大值 | ||||||||||||||||||
count_nonzero() | 統(tǒng)計非零元素值 | ||||||||||||||||||
floor | 向下取整 | ||||||||||||||||||
ceil | 向上取整 | ||||||||||||||||||
prod | 所有元素乘積結(jié)果 | ||||||||||||||||||
argsort | argsort函數(shù)返回的是數(shù)組值從小到大的索引值
? b——正序 -b——倒序 如果是多維的話(默認(rèn)是最大的一個axis) Axis=0 a[..][0][0],a[…][0][1],a[…][0][2] a[..][1][0],a[…][1][1],a[…][1][2] Axis=1 a[0][…][0],a[0][…][1],a[0][…][2] Axis=2同理 | ||||||||||||||||||
copy | 這個是真copy,不是view | ||||||||||||||||||
clip | 截取數(shù)組中在min和max之間的部分,比min小的置為min,比max大的置為max | ||||||||||||||||||
cumsum/cumprod | 括號是幾——第幾維度累加/累乘(a[][][][]里面的第幾個,從左往右) 括號里是0:原第一行=原第一行 ? 原第二行=原第二行+原第一行 ? 原第三行=原第三行+原第二行+原第一行 括號里是1:列的操作 沒有字母,所有元素,一個一個疊加 | ||||||||||||||||||
diff | 類差運算 | ||||||||||||||||||
flatten | 返回一份數(shù)據(jù)拷貝,對拷貝所做的修改不影響原始數(shù)組 F風(fēng)格:按列展開 flat 一個迭代器 | ||||||||||||||||||
np.isin(a,b) | ?用于判定a中的元素在b中是否出現(xiàn)過,如果出現(xiàn)過返回True,否則返回False,最終結(jié)果為一個形狀和a一模一樣的數(shù)組。 和np.where搭配使用,效果更好(np.where返回True的坐標(biāo)) 分別是我找到的1的第一維坐標(biāo)和第二位坐標(biāo) | ||||||||||||||||||
nditer | 按照ndarray在內(nèi)存中的存儲順序逐個訪問 a和a轉(zhuǎn)置在內(nèi)存中的存儲順序一樣——他們的遍歷順序一樣 默認(rèn)order=’C‘行優(yōu)先 ——order=“F’(fortran 列優(yōu)先)? | ||||||||||||||||||
meshgrid(ndarray,ndarray) | 返回坐標(biāo)方格的X與Y x和y都是二維數(shù)組,分別是這些點的橫坐標(biāo)/縱坐標(biāo) | ||||||||||||||||||
mean/average | 計算平均數(shù),加axis就是某一個軸, 比如axis=0,就是每一列一個平均數(shù)(a[;;;][0],a[,,,,][1],…..,) average只能是np.average | ||||||||||||||||||
median | 中位數(shù) | ||||||||||||||||||
std | 標(biāo)準(zhǔn)差 | ||||||||||||||||||
newaxis | 添加一個維度 感覺還是reshape靠譜一點 | ||||||||||||||||||
ravel | 和flatten差不多,唯一的區(qū)別是,修改會影響原始數(shù)組 | ||||||||||||||||||
reshape | |||||||||||||||||||
resize | 如果一樣大的話和a.reshape()差不多 shape比a的尺寸小的話,那就是截取 如果尺寸大的話,會把a的元素按照a的順序補進(jìn)去 | ||||||||||||||||||
np.round | round( number ) 函數(shù)會返回浮點數(shù) number 的四舍五入值 具體定義為 round(number[,digits]): 如果 digits>0 ,四舍五入到指定的小數(shù)位; 如果 digits=0 ,四舍五入到最接近的整數(shù); 如果 digits<0 ,則在小數(shù)點左側(cè)進(jìn)行四舍五入; 如果 round() 函數(shù)只有 number 這個參數(shù),則等同于 digits=0。 | ||||||||||||||||||
split | 等量對分 (axis=0 a[1~n][0]會被等分到各個里面去) 一定是等量,不等量的話會報錯 vsplit=split(axis=0) hsplit=split(axis=1) | ||||||||||||||||||
array_split | 不等量分割 | ||||||||||||||||||
np.sin | 逐元素取sin | ||||||||||||||||||
std | 計算標(biāo)準(zhǔn)差 Axis=0——計算a[…][0][0],a[…][0][1],…的標(biāo)準(zhǔn)差 | ||||||||||||||||||
squeeze | 刪除單維度條目 | ||||||||||||||||||
tolist | 轉(zhuǎn)換為list | ||||||||||||||||||
triu(data,k) | 以data為數(shù)據(jù),創(chuàng)建一個上三角矩陣,k表示這個上三角的邊接往上/下移動幾條線的距離 | ||||||||||||||||||
tile | np.tile(a,(2))函數(shù)的作用就是將函數(shù)將函數(shù)沿著X軸擴大兩倍。如果擴大倍數(shù)只有一個,默認(rèn)為X軸 np.tile(a,(2,1))第一個參數(shù)為Y軸擴大倍數(shù),第二個為X軸擴大倍數(shù)。本例中X軸擴大一倍便為不復(fù)制。 | ||||||||||||||||||
np.timedelta(num,'x') | 計算兩個datetime中間差多少時間間隔(向下取整)【Y、M、W、D、h、m、s、ms、us、ns】 | ||||||||||||||||||
轉(zhuǎn)置 | |||||||||||||||||||
where | numpy.where()?有兩種用法: 1. np.where(condition, x, y) 滿足條件(condition),輸出x,不滿足輸出y。*如果y是數(shù)組的話,輸出y相應(yīng)位置的元素 2. np.where(condition) 只有條件 (condition),沒有x和y,則輸出滿足條件 (即非0) 元素的坐標(biāo)。 這里的坐標(biāo)以tuple的形式給出,通常原數(shù)組有多少維,輸出的tuple中就包含幾個數(shù)組,分別對應(yīng)符合條件元素的各維坐標(biāo)。 | ||||||||||||||||||
fromstring | 從string中提取成ndarray ?只能讀取一個數(shù)值序列 |
番外篇:理解axis
前面我們提到了axis的用法
Axis=0——
a[..][0][0],a[…][0][1],a[…][0][2]
a[..][1][0],a[…][1][1],a[…][1][2]
Axis=1——
a[0][…][0],a[0][…][1],a[0][…][2]
換一種理解就是:
有兩組數(shù)據(jù),它們的維度都是(2,3),即都是兩行三列的數(shù)據(jù)。
當(dāng)axis設(shè)為0時,表示我們要修改第一個維度的數(shù)據(jù),兩組數(shù)據(jù)的第一個維度都是2,當(dāng)它們合并時就變成了4,所以合并后的數(shù)據(jù)的維度就是(4,3),即變成了四行三列。同理,axis設(shè)為1,合并后的數(shù)據(jù)維度就變成了(2,6),即兩行六列~
同理,axis參數(shù)在其他方法里也可以用同樣的方法思考,比如求均值的mean方法,當(dāng)axis設(shè)為0時,對第一個維度的數(shù)據(jù)進(jìn)行求均值,維度為(2,3)的數(shù)據(jù)計算完后就變成了維度為(1,3)的數(shù)據(jù)
5 文件處理
tofile() & fromfile() | tofile()將數(shù)組中的數(shù)據(jù)以二進(jìn)制格式寫進(jìn)文件 tofile()輸出的數(shù)據(jù)不保存數(shù)組形狀和元素類型等信息 fromfile()函數(shù)讀回數(shù)據(jù)時需要用戶指定元素類型,并對數(shù)組的形狀進(jìn)行適當(dāng)?shù)男薷?/p> 讀入數(shù)據(jù)的時候,需要設(shè)置正確的dtype參數(shù),并且修改屬組的shape屬性,才會得到和原始數(shù)據(jù)一致的結(jié)果 sep參數(shù):tofile 和 fromfile中數(shù)值的分隔符 |
save() & load() | NumPy專用的二進(jìn)制格式保存數(shù)據(jù),它們會自動處理元素類型和形狀等信息 |
savez() | 將多個數(shù)組保存到一個文件中 savez()的第一個參數(shù)是文件名,其后的參數(shù)都是需要保存的數(shù)組 ?沒有起名的話就是'arr_0","arr_1",....起來名字的就是所起的名字 |
savez_compressed() | 在savez的基礎(chǔ)上 進(jìn)行一次數(shù)據(jù)壓縮 ? |
ndarray寫入csv | 先轉(zhuǎn)化成DataFrame |
savetxt() & loadtxt() |
|
isnan | 判斷ndarray里面的元素是否是NaN |
?python 筆記:愛因斯坦求和 einsum_UQI-LIUWJ的博客-CSDN博客
總結(jié)
以上是生活随笔為你收集整理的python包介绍:numpy的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 错误解决 :Microsoft Visu
- 下一篇: python笔记:load_ext au