日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

python数组求和函数_python数据分析之Numpy数据库第三期数组的运算

發(fā)布時(shí)間:2025/3/20 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python数组求和函数_python数据分析之Numpy数据库第三期数组的运算 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上期數(shù)組的索引和切片的知識(shí)總結(jié)通道:數(shù)組的索引和切片

數(shù)組和標(biāo)量間的運(yùn)算

數(shù)組之所以強(qiáng)大而且重要的原因,是其不需要通過(guò)循環(huán)就可以完成批量計(jì)算,也就是矢量化

import numpy as np

a = [1,2,3]

b=[]

for i in a:

b.append(i*10)

b

out[1]:

[10, 20, 30]

arr = np.array([1,2,3])

arr *10

out[2]:

array([10, 20, 30])

相同維度的數(shù)組的算術(shù)運(yùn)算都可以直接應(yīng)用到元素中,也就是元素級(jí)運(yùn)算

arr*arr

out[3]:

array([1, 4, 9])

arr - arr

out[4];

array([0, 0, 0])

通用函數(shù)

通用函數(shù)(ufunc)是一種對(duì)數(shù)組中的數(shù)據(jù)執(zhí)行元素級(jí)運(yùn)算的函數(shù)。例如:通過(guò)abs函數(shù)求絕對(duì)值,square函數(shù)求平方

arr = np.random.randn(3,3)

arr

out[5];

array([[-0.17634898, 1.24131891, -1.55449196],

[ 0.04820966, -0.1420969 , -0.80747892],

[-0.05187637, 0.41997844, -2.12123818]])

np.abs(arr)

out[6]:

array([[0.17634898, 1.24131891, 1.55449196],

[0.04820966, 0.1420969 , 0.80747892],

[0.05187637, 0.41997844, 2.12123818]])

np.square(arr)

out[7];

array([[3.10989635e-02, 1.54087265e+00, 2.41644525e+00],

[2.32417090e-03, 2.01915297e-02, 6.52022212e-01],

[2.69115814e-03, 1.76381893e-01, 4.49965142e+00]])

以上函數(shù)都是傳入一個(gè)數(shù)組,所以這些函數(shù)都是一元函數(shù)。有些函數(shù)需要傳入倆個(gè)數(shù)組并返回一個(gè)數(shù)組,這些函數(shù)被稱為二元函數(shù)。例如:add函數(shù)用于倆個(gè)數(shù)組相加,minimun函數(shù)可以計(jì)算元素最小值。

arr1 = np.random.randint(1,10,size = (5))

arr1

out[8]:

array([1, 8, 3, 2, 1])

arr2 = np.random.randint(1,10,size = (5))

arr2

out[9];

array([4, 8, 7, 4, 3])

np.add(arr1,arr2)

out[10]:

array([ 5, 16, 10, 6, 4])

np.minimum(arr1,arr2)

out[11]

array([1, 8, 3, 2, 1])

有些通用函數(shù)還可以返回倆個(gè)數(shù)組,例如:modf函數(shù),可以返回?cái)?shù)組元素的小數(shù)和整數(shù)部分

arr1 = np.random.normal(2,4,size=(6,))

arr

out[12]:

array([[-0.17634898, 1.24131891, -1.55449196],

[ 0.04820966, -0.1420969 , -0.80747892],

[-0.05187637, 0.41997844, -2.12123818]])

np.modf(arr)

out[13]:

(array([[-0.17634898, 0.24131891, -0.55449196],

[ 0.04820966, -0.1420969 , -0.80747892],

[-0.05187637, 0.41997844, -0.12123818]]),

array([[-0., 1., -1.],

[ 0., -0., -0.],

[-0., 0., -2.]]))

條件邏輯運(yùn)算

首先創(chuàng)建三個(gè)數(shù)組

arr1 = np.array([1,2,3,4])

arr2 = np.array([5,6,7,8])

cond = np.array([True,False,False,True])

如果需要通過(guò)cond的值來(lái)選取arr1和arr2的值,當(dāng)cond為True時(shí),選擇arr1否則選擇arr2的值,那么可以通過(guò)if語(yǔ)句判斷來(lái)實(shí)現(xiàn)。

result = [(x if c else y) for x,y,c in zip(arr1,arr2,cond)]

result

out[14];

[1, 6, 7, 4]

但這種方法存在倆個(gè)問(wèn)題:第一,對(duì)大規(guī)模數(shù)組處理速度不是很快;第二,無(wú)法用于多維數(shù)組。若使用Numpy的where函數(shù)則可以解決這倆個(gè)問(wèn)題

result = np.where(cond,arr1,arr2)

result

out[15]:

array([1, 6, 7, 4])

where函數(shù)中的第二個(gè)和第三個(gè)參數(shù)可以為標(biāo)量。在數(shù)據(jù)分析,經(jīng)常需要通過(guò)一些條件將數(shù)組進(jìn)行處理。例如新建一個(gè)隨機(jī)符合正態(tài)分布的數(shù)組,通過(guò)數(shù)據(jù)處理將正值替換為1,負(fù)值替換為-1.

arr = np.random.randn(4,4)

arr

out[16]:

array([[-0.47119857, 0.74300761, -2.02821269, -0.3549485 ],

[ 1.36356163, -0.61257804, 0.48115343, 0.86997115],

[-0.4559936 , 0.26179048, -1.20468106, -0.56509321],

[-0.23739251, 0.83751607, -0.33541895, 0.76305371]])

new_arr = np.where(arr>0,1,-1)

new_arr

out[17]

array([[-1, 1, -1, -1],

[ 1, -1, 1, 1],

[-1, 1, -1, -1],

[-1, 1, -1, 1]])

使用elif函數(shù)可以進(jìn)行多條件的判別。np.where函數(shù)通過(guò)嵌套的where表達(dá)式也可以完成同樣的功能

arr = np.random.randint(1,300,size=(3,3))

arr

out[18];

array([[203, 102, 270],

[136, 60, 106],

[126, 97, 64]])

new_arr = np.where(arr > 200,3,

np.where(arr>100,2,1))

new_arr

out[19]:

array([[3, 2, 3],

[2, 1, 2],

[2, 1, 1]])

統(tǒng)計(jì)運(yùn)算

Numpy庫(kù)支持對(duì)整個(gè)數(shù)組或按指定軸向的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)計(jì)算,例如,sum函數(shù)用于求和;mean函數(shù)用于求算術(shù)平均數(shù);std函數(shù)用于求標(biāo)準(zhǔn)差。

arr = np.random.randn(4,4)

arr

out[20]

array([[ 0.30819793, -1.06144959, 1.46672816, 1.18847115],

[ 0.87732943, -1.58171074, -0.6957929 , 0.72827265],

[ 0.31470934, -0.46280001, -0.40335385, 1.52528851],

[ 2.28676812, 0.20790929, -0.11272405, 1.74249516]])

arr.sum()

out[21];

6.328338600041427

arr.mean()

out[22];

0.3955211625025892

arr.std()

out[23]

1.0515585180241533

上面這些函數(shù)也可以傳入axis參數(shù),用于計(jì)算指定軸方向的統(tǒng)計(jì)值

arr.mean(axis=1)

out[24];

array([ 0.47548691, -0.16797539, 0.243461 , 1.03111213])

arr.sum(0)

out[25]:

array([ 3.78700481, -2.89805105, 0.25485737, 5.18452746])

cumsum和cumpod方法會(huì)產(chǎn)生計(jì)算結(jié)果組成的數(shù)組

arr = np.arange(9).reshape(3,3)

arr

out[26]:

array([[0, 1, 2],

[3, 4, 5],

[6, 7, 8]])

arr.cumsum(0)

out[27];

array([[ 0, 1, 2],

[ 3, 5, 7],

[ 9, 12, 15]], dtype=int32)

arr.cumprod(1)

out[28]

array([[ 0, 0, 0],

[ 3, 12, 60],

[ 6, 42, 336]], dtype=int32)

#基本數(shù)組的統(tǒng)計(jì)方法

#方法 使用說(shuō)明

#sum 求和

#mean 算術(shù)平均數(shù)

#std、var 標(biāo)準(zhǔn)差和方差

#min、max 最小值和最大值

#argmin、argmax 最小和最大元素的索引

#cumsum 所有元素的累計(jì)和

#cumprod 所有元素的累計(jì)積

布爾型數(shù)組運(yùn)算

對(duì)于布爾型數(shù)組,其布爾值會(huì)被強(qiáng)制轉(zhuǎn)換為1(True)和0(False)

arr = np.random.randn(20)

arr

out[29]:

array([-0.42961012, 0.56609038, -1.1741952 , -0.75376119, -1.09201392,

1.43960879, 0.87644242, -0.5947441 , 1.08380455, -0.06300785,

0.95369943, -1.27213285, 0.05017716, 0.27420381, -0.09095471,

-1.35379462, 0.61902337, -0.59390741, -0.22647004, -0.03306254])

(arr > 0).sum()

out[30]:

8

另外還有倆種方法any和all也可以用于布爾型數(shù)組運(yùn)算。any方法用于測(cè)試數(shù)組中是否存在一個(gè)或多個(gè)True;all方法用于查找數(shù)組中的所有值是否為True

arr = np.array([True,False,False,True])

arr

out[31]:

array([ True, False, False, True])

arr.any()

out[32];

True

arr.all()

out[33]:

False

排序

與python列表類似,Numpy數(shù)組也可以通過(guò)sort()方法進(jìn)行排序

arr = np.random.randn(10)

arr

out[34]:

array([ 2.2119974 , -1.52764083, 0.56082579, 0.14395966, 1.89882088,

0.70710935, -1.89196899, -2.40109916, 1.64130244, 2.65960228])

arr.sort()

arr

out[35]:

array([-2.40109916, -1.89196899, -1.52764083, 0.14395966, 0.56082579,

0.70710935, 1.64130244, 1.89882088, 2.2119974 , 2.65960228])

對(duì)于多維數(shù)組,可以通過(guò)指定軸方向進(jìn)行排序

arr = np.random.randn(5,3)

arr

out[36]:

array([[ 2.45789818, 0.36223423, -0.77491822],

[-0.90154818, 0.03508642, 0.59097629],

[-1.11291537, 0.69388491, -0.53710136],

[ 0.3184309 , -0.1081375 , -0.65716382],

[-0.71120618, 1.60547342, -0.11556702]])

arr.sort(1)

arr

out[37]:

array([[-0.77491822, 0.36223423, 2.45789818],

[-0.90154818, 0.03508642, 0.59097629],

[-1.11291537, -0.53710136, 0.69388491],

[-0.65716382, -0.1081375 , 0.3184309 ],

[-0.71120618, -0.11556702, 1.60547342]])

集合運(yùn)算

Numpy庫(kù)中提供了針對(duì)一維數(shù)組的基本集合運(yùn)算。在數(shù)據(jù)分析中,常用np.unique方法找出數(shù)組中的唯一值。

fruits = np.array(['apple','banana','pear','banana','pear','apple','pear'])

fruits

out[38]:

array(['apple', 'banana', 'pear', 'banana', 'pear', 'apple', 'pear'],

dtype='

np.unique(fruits)

out[39]:

array(['apple', 'banana', 'pear'], dtype='

arr = np.array([2,3,3,2,8,1])

arr

out[40]:

array([2, 3, 3, 2, 8, 1])

np.unique(arr)

out[41]:

array([1, 2, 3, 8])

注意:唯一值進(jìn)行了排序

np.in1d方法用于測(cè)試幾個(gè)數(shù)組中是否包含相同的值,返回一個(gè)布爾值數(shù)組。

arr = np.array([2,3,5,7])

arr

out[42]:

array([2, 3, 5, 7])

np.in1d(arr,[2,7])

out[43]:

array([ True, False, False, True])

#數(shù)組的集合運(yùn)算

#方法 使用說(shuō)明

#unique(x) 唯一值

#intersect1d(x,y) 公共元素

#union1d(x,y) 并集

#in1d(x,y) x的元素是否在y中,返回布爾型數(shù)組

#setdiff1d(x,y) 集合的差

#setxor1d(x,y) 交集取反

線性代數(shù)

對(duì)于矩陣而言,需要求的是點(diǎn)積,這里Numpy庫(kù)提供了用于矩陣乘法的dot函數(shù)

arr1 = np.array([[1,2,3],[4,5,6]])

arr1

out[44]:

array([[1, 2, 3],

[4, 5, 6]])

arr2 = np.arange(9).reshape(3,3)

arr2

out[45]:

array([[0, 1, 2],

[3, 4, 5],

[6, 7, 8]])

np.dot(arr1,arr2)

out[46]:

array([[24, 30, 36],

[51, 66, 81]])

對(duì)于更多的矩陣計(jì)算,可通過(guò)Numpy庫(kù)的linalg模塊來(lái)完成

from numpy.linalg import det

arr = np.array([[1,2],[3,4]])

arr

out[47]:

array([[1, 2],

[3, 4]])

det(arr)

out[48]:

-2.0000000000000004

注意:更多的矩陣運(yùn)算說(shuō)明可查看linalg幫助

總結(jié)

以上是生活随笔為你收集整理的python数组求和函数_python数据分析之Numpy数据库第三期数组的运算的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。