柚子快報激活碼778899分享:Numpy基礎(chǔ)
柚子快報激活碼778899分享:Numpy基礎(chǔ)
目錄:
一、簡介:二、array數(shù)組ndarray:1.array( )創(chuàng)建數(shù)組:2.數(shù)組賦值和引用的區(qū)別:3.arange( )創(chuàng)建區(qū)間數(shù)組:4.linspace( )創(chuàng)建等差數(shù)列:5.logspace( )創(chuàng)建等比數(shù)列:6.zeros( )創(chuàng)建全0數(shù)組:7.ones( )創(chuàng)建全1數(shù)組:8.NumPy數(shù)組屬性:(1)shape屬性:(2)reshape屬性:調(diào)整數(shù)組維度
9.一維數(shù)組切片、索引操作:10.二維數(shù)組切片、索引操作:11.整數(shù)數(shù)組索引:(1)一次性取多個元素,返回一維數(shù)組:(2)一次性取多個元素,將待返回的一維數(shù)組重整成二維數(shù)組返回:(3)一次性取連續(xù)的多行多列元素,返回二維數(shù)組:(4)取特定行特定列不連續(xù)元素,返回二維數(shù)組:
12.布爾數(shù)組索引:(1)以數(shù)組形式返回數(shù)組x>6的元素:(2)以數(shù)組形式返回數(shù)組中奇數(shù)的元素:(3)根據(jù)True|False返回數(shù)組中符合要求的元素數(shù)組:取行:取列:
三、廣播機(jī)制:四、numpy統(tǒng)計:1.平均值:2.中位數(shù):3.標(biāo)準(zhǔn)差:4.方差:5.最大值:6.最小值:7.加權(quán)平均值:
五、自定義結(jié)構(gòu)化數(shù)據(jù)類型:*注:數(shù)據(jù)類型別名:*
六、文件操作:1.讀取普通文本文件:2.讀取csv文件:3.讀取不同列表示不同信息文件:4.空數(shù)據(jù)處理:
七、隨機(jī)數(shù):八、numpy常用函數(shù):1.resize( ):2.unique( ):3.sort( ):
一、簡介:
是Python 科學(xué)計算庫,方便對數(shù)組、矩陣進(jìn)行計算,包含大量線性代數(shù)、傅里葉變換、隨機(jī)數(shù)等大量函數(shù)。直接以數(shù)組、矩陣為粒度計算并支撐大量的數(shù)學(xué)函數(shù),效率高。各種數(shù)據(jù)科學(xué)類庫(Scikit-Learn、TensorFlow、Pandas)等的基礎(chǔ)庫。
二、array數(shù)組ndarray:
1.array( )創(chuàng)建數(shù)組:
import numpy as np
my_list = [
[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]
]
#先將my_list二維數(shù)組元素強轉(zhuǎn)為float型,然后是用該數(shù)組創(chuàng)建二維ndarray數(shù)組
my_ndarray = np.array(my_list,float,ndmin=2)
print(my_ndarray)
2.數(shù)組賦值和引用的區(qū)別:
#1.引用機(jī)制(指針)
my_ndarray_copy = my_ndarray
print('my_ndarray的內(nèi)存地址:',id(my_ndarray))
print('my_ndarray_copy的內(nèi)存地址:',id(my_ndarray_copy))
#2.拷貝機(jī)制
my_ndarray_copy = np.array(my_ndarray)
print('my_ndarray的內(nèi)存地址:',id(my_ndarray))
print('my_ndarray_copy的內(nèi)存地址:',id(my_ndarray_copy))
3.arange( )創(chuàng)建區(qū)間數(shù)組:
a = np.arange(10,20,2,dtype=float)
print(a)
4.linspace( )創(chuàng)建等差數(shù)列:
等差數(shù)列在線性回歸經(jīng)常用作樣本集
#創(chuàng)建起始值為0,終止值為100,樣本數(shù)量為11的等差數(shù)列數(shù)組
b = np.linspace(0,100,11,dtype=int)
print(b)
5.logspace( )創(chuàng)建等比數(shù)列:
#首先將1-5區(qū)間均勻取3個數(shù)X(1,3,5),然后創(chuàng)建int型等比數(shù)列,元素值為X^base(起始值為1^2,終止值為5^2)
c = np.logspace(1,5,3,base=2,dtype=int)
print(c)
6.zeros( )創(chuàng)建全0數(shù)組:
'''
第一個參數(shù):
(a)表示a個元素的一維數(shù)組
(a,b)表示a行b列的二維數(shù)組
(a,b,c)表示a塊,每塊b行c列的三維數(shù)組
'''
#創(chuàng)建2行2列的全0數(shù)組
d = np.zeros((2,2),dtype=int)
print(d)
7.ones( )創(chuàng)建全1數(shù)組:
參數(shù)同全0
'''
第一個參數(shù):
(a)表示a個元素的一維數(shù)組
(a,b)表示a行b列的二維數(shù)組
(a,b,c)表示a塊,每塊b行c列的三維數(shù)組
'''
#創(chuàng)建2行2列的全1數(shù)組
e = np.ones((2,2),dtype=int)
print(e)
8.NumPy數(shù)組屬性:
(1)shape屬性:
shape返回值:
(a)表示a個元素的一維數(shù)組(a,b)表示a行b列的二維數(shù)組(a,b,c)表示a塊,每塊b行c列的三維數(shù)組
(2)reshape屬性:調(diào)整數(shù)組維度
返回調(diào)整維度后的副本,而不改變原ndarray
f = np.arange(20).reshape(4,5)
print(f)
9.一維數(shù)組切片、索引操作:
冒號::解釋
[2]將返回與該索引相對應(yīng)的單個元素[2:7]將返回兩個索引之間的元素,不包括停止索引[2:]表示從該索引開始以后的所有元素都將被提取[:7]表示該索引之前的所有元素都將被提取[::-1]表示取反,從后往前取所有元素,步長為-1
a1 = np.arange(10)
print(a1)
#切片操作(注意是引用,a1、a2實際上指向同一片內(nèi)存空間)
a2 = a1[2:7:2]
print(a2)
#理解引用機(jī)制,并理解索引=數(shù)組下標(biāo)=位序-1,
a2[1]=888
print(a1)
print(a2)
10.二維數(shù)組切片、索引操作:
冒號::解釋
[2]將返回一維數(shù)組[2][2]將返回特定元素[2:7]將返回兩個索引之間的一維數(shù)組集,即返回一個二維數(shù)組,不包括停止索引[2:]表示從該索引開始以后的所有一維數(shù)組集,即返回一個二維數(shù)組都將被提取[:7]表示該索引之前的所有一維數(shù)組集,即返回一個二維數(shù)組都將被提取[...][1]表示[…]先取所有行即取所有元素,[1]再取所有行的第二行一維數(shù)組[2,2]將返回特定元素[...,1]或[:,1]返回第二列元素,組成一個一維數(shù)組返回x[...,1:]返回第二列之后的所有列,組成一個二維數(shù)組返回
11.整數(shù)數(shù)組索引:
(1)一次性取多個元素,返回一維數(shù)組:
x = np.array([
[1,2],
[3,4],
[5,6]
])
#[0,0,2]是行索引,[0,1,1]是列索引,表示取[0,0]、[0,1]、[2,1]的元素,組成一維數(shù)組返回
y = x[[0,0,2],[0,1,1]]
y
(2)一次性取多個元素,將待返回的一維數(shù)組重整成二維數(shù)組返回:
x = np.array([
[1,2,3],
[4,5,6],
[7,8,9]
])
#行索引
r = np.array([0,0,0,2])
#列索引
c = np.array([0,1,2,2])
#x[r,c]根據(jù)索引獲取一維數(shù)組,reshape(2,2)將返回的4*1一維數(shù)組轉(zhuǎn)為2*2的二維數(shù)組
s = x[r,c].reshape(2,2)
s
(3)一次性取連續(xù)的多行多列元素,返回二維數(shù)組:
x = np.array([
[1,2,3],
[4,5,6],
[7,8,9]
])
#行取2行3行,列取2列3列
y = x[1:3,1:3]
y
(4)取特定行特定列不連續(xù)元素,返回二維數(shù)組:
#取1,3行、1,3,4列所有元素
x = np.array([
[1,2,3,4],
[4,5,6,7],
[7,8,9,10]
])
#先取1,3行,:可以換成...
temp = x[[0,2],:]
#再根據(jù)上一步結(jié)果取1,3,4列,:可以換成...
temp[:,[0,2,3]]
12.布爾數(shù)組索引:
當(dāng)返回的結(jié)果需要經(jīng)過布爾運算時,會使用到另一種高級索引方式,即布爾數(shù)組索引。
(1)以數(shù)組形式返回數(shù)組x>6的元素:
x = np.array([
[1,2,3],
[4,5,6],
[7,8,9]
])
#
x[x>6]
(2)以數(shù)組形式返回數(shù)組中奇數(shù)的元素:
x = np.array([
[1,2,3],
[4,5,6],
[7,8,9]
])
#將數(shù)組中所有奇數(shù)置為-1(x[x%2!=0]獲取奇數(shù),=-1賦值)
x[x%2!=0] = -1
x
(3)根據(jù)True|False返回數(shù)組中符合要求的元素數(shù)組:
取行:
x = np.array([
[1,2,3,4],
[4,5,6,7],
[7,8,9,10]
])
row = np.array([False,False,True])
print(x[row,...])
取列:
column = np.array([True,False,True,False])
x = np.array([
[1,2,3,4],
[4,5,6,7],
[7,8,9,10]
])
print(x[...,column])
三、廣播機(jī)制:
廣播是numpy對不同形狀的數(shù)組進(jìn)行數(shù)值計算的方式,對數(shù)組的算術(shù)運算通常在相應(yīng)的元素上進(jìn)行。
(1)若兩個數(shù)組形狀相同,那么兩個數(shù)組相乘即為數(shù)組對應(yīng)位置元素相乘。(2)若兩個數(shù)組形狀不同,那么兩個數(shù)組相乘就需要使用廣播機(jī)制。 廣播機(jī)制的核心是對形狀較小的數(shù)組,在橫向或縱向的進(jìn)行一定次數(shù)的重復(fù),使其與形狀較大的數(shù)組具有相同的維度后相加。
廣播的規(guī)則:
輸出數(shù)組的形狀是是輸入數(shù)組形狀的各個維度上的最大值。如果輸入數(shù)組的某個維度和輸出數(shù)組的對應(yīng)維度的長度相同或輸入數(shù)組的某個維度的長度為1時,這個輸入數(shù)組能夠用來計算,否則不能運算。當(dāng)輸入數(shù)組的某個維度的長度為1時,沿著此維度運算時都用此維度上的第一組數(shù)組值。
四、numpy統(tǒng)計:
1.平均值:
x = np.array([
[1,2,3],
[4,5,6],
[7,8,9]
])
#計算所有元素平均值
print(x.mean())
#從上至下計算每列平均值,返回一維數(shù)組
print(x.mean(axis=0))
#從左至右計算每行平均值,返回一維數(shù)組
print(x.mean(axis=1))
2.中位數(shù):
x = np.array([
[1,2,3],
[4,5,6],
[7,8,9]
])
np.median(x)
3.標(biāo)準(zhǔn)差:
x = np.array([
[1,2,3],
[4,5,6],
[7,8,9]
])
np.std(x)
4.方差:
x = np.array([
[1,2,3],
[4,5,6],
[7,8,9]
])
np.var(x)
5.最大值:
x = np.array([
[1,2,3],
[4,5,6],
[7,8,9]
])
np.max(x)
6.最小值:
x = np.array([
[1,2,3],
[4,5,6],
[7,8,9]
])
np.min(x)
7.加權(quán)平均值:
x = np.array([
[1,2,3],
[4,5,6],
[7,8,9]
])
np.average(x)
五、自定義結(jié)構(gòu)化數(shù)據(jù)類型:
#創(chuàng)建結(jié)構(gòu)體
teacher = np.dtype([
#(變量名稱,變量數(shù)據(jù)類型->"數(shù)據(jù)類型別名+所占字節(jié)數(shù)")
("name","U8"),
("age","i1"),
("salary","f4")
])
#創(chuàng)建數(shù)組,數(shù)組元素為teacher類型
b = np.array(
[
("clh",20,30000),
("ccc",18,10000)
],dtype = teacher
)
print("數(shù)組b內(nèi)容為:",b)
print("數(shù)組中所有name:",b["name"])
注:數(shù)據(jù)類型別名:
六、文件操作:
注意:skiprows不忽略注釋行和空白行,從文檔第一行跳過
1.讀取普通文本文件:
文本文件一般用空格分隔數(shù)據(jù)
data = np.loadtxt("data.txt",dtype=np.int32)
2.讀取csv文件:
csv文件是以逗號分隔的文本文件
data = np.loadtxt("data.csv",dtype=np.int32,delimiter=",")
3.讀取不同列表示不同信息文件:
#1.定義結(jié)構(gòu)體
user_info = np.dtype(
[
("name","U10"),
("age","i1"),
("gender","U1"),
("height","i2")
]
)
#2.用結(jié)構(gòu)體類型接數(shù)據(jù),并且使用skiprows跳過第一行不讀
data = np.loadtxt("data.txt",dtype=user_info,skiprows=1,encoding="utf-8")
4.空數(shù)據(jù)處理:
#使用異常機(jī)制
def parse_age(age):
try:
return int(age)
except:
return 0
#converters調(diào)用自定義函數(shù)進(jìn)行空數(shù)據(jù)處理
data = np.loadtxt("data.csv",delimiter=",",usecols=1,converters={1:parse_age})
七、隨機(jī)數(shù):
'''
(a)表示a個元素的一維數(shù)組
(a,b)表示a行b列的二維數(shù)組
(a,b,c)表示a塊,每塊b行c列的三維數(shù)組
'''
#創(chuàng)建[0,1)內(nèi)給定維度的隨機(jī)數(shù)組,該組元素符合正態(tài)分布
np.random.rand(3,3)
#返回5*5個[1,5)內(nèi)的隨機(jī)整數(shù)
np.random.randint(1,5,size=(5,5))
八、numpy常用函數(shù):
1.resize( ):
#元素不夠時使用原數(shù)組數(shù)據(jù)補齊
a = np.array([1,2,3,4,5,6,7,8,9])
np.resize(a,(4,4))
#元素不夠時使用0補齊
a = np.array([1,2,3,4,5,6,7,8,9])
a.resize((4,4),refcheck=False)
a
2.unique( ):
#去重+排序,返回去重后的數(shù)組+元素所在原數(shù)組的索引+各元素重復(fù)次數(shù)
a = np.array([2,3,4,5,6,1,2,3])
b,indices,nums = np.unique(a,return_index=True,return_counts=True)
print(b)
print(indices)
print(nums)
3.sort( ):
#結(jié)構(gòu)體
teacher = np.dtype([
#(變量名稱,變量數(shù)據(jù)類型)
("name","U8"),
("age","i1"),
("salary","f4")
])
#創(chuàng)建數(shù)組,數(shù)組元素為teacher類型
b = np.array(
[
("clh",20,30000),
("ccc",18,10000)
],dtype = teacher
)
#按年齡排序
np.sort(b,order="age")
柚子快報激活碼778899分享:Numpy基礎(chǔ)
好文鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。