日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

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

上期數組的索引和切片的知識總結通道:數組的索引和切片

數組和標量間的運算

數組之所以強大而且重要的原因,是其不需要通過循環就可以完成批量計算,也就是矢量化

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])

相同維度的數組的算術運算都可以直接應用到元素中,也就是元素級運算

arr*arr

out[3]:

array([1, 4, 9])

arr - arr

out[4];

array([0, 0, 0])

通用函數

通用函數(ufunc)是一種對數組中的數據執行元素級運算的函數。例如:通過abs函數求絕對值,square函數求平方

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]])

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

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])

有些通用函數還可以返回倆個數組,例如:modf函數,可以返回數組元素的小數和整數部分

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.]]))

條件邏輯運算

首先創建三個數組

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

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

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

如果需要通過cond的值來選取arr1和arr2的值,當cond為True時,選擇arr1否則選擇arr2的值,那么可以通過if語句判斷來實現。

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

result

out[14];

[1, 6, 7, 4]

但這種方法存在倆個問題:第一,對大規模數組處理速度不是很快;第二,無法用于多維數組。若使用Numpy的where函數則可以解決這倆個問題

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

result

out[15]:

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

where函數中的第二個和第三個參數可以為標量。在數據分析,經常需要通過一些條件將數組進行處理。例如新建一個隨機符合正態分布的數組,通過數據處理將正值替換為1,負值替換為-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函數可以進行多條件的判別。np.where函數通過嵌套的where表達式也可以完成同樣的功能

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]])

統計運算

Numpy庫支持對整個數組或按指定軸向的數據進行統計計算,例如,sum函數用于求和;mean函數用于求算術平均數;std函數用于求標準差。

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

上面這些函數也可以傳入axis參數,用于計算指定軸方向的統計值

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方法會產生計算結果組成的數組

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)

#基本數組的統計方法

#方法 使用說明

#sum 求和

#mean 算術平均數

#std、var 標準差和方差

#min、max 最小值和最大值

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

#cumsum 所有元素的累計和

#cumprod 所有元素的累計積

布爾型數組運算

對于布爾型數組,其布爾值會被強制轉換為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也可以用于布爾型數組運算。any方法用于測試數組中是否存在一個或多個True;all方法用于查找數組中的所有值是否為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數組也可以通過sort()方法進行排序

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])

對于多維數組,可以通過指定軸方向進行排序

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]])

集合運算

Numpy庫中提供了針對一維數組的基本集合運算。在數據分析中,常用np.unique方法找出數組中的唯一值。

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])

注意:唯一值進行了排序

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

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])

#數組的集合運算

#方法 使用說明

#unique(x) 唯一值

#intersect1d(x,y) 公共元素

#union1d(x,y) 并集

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

#setdiff1d(x,y) 集合的差

#setxor1d(x,y) 交集取反

線性代數

對于矩陣而言,需要求的是點積,這里Numpy庫提供了用于矩陣乘法的dot函數

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]])

對于更多的矩陣計算,可通過Numpy庫的linalg模塊來完成

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

注意:更多的矩陣運算說明可查看linalg幫助

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。