3 5 陣列運算

2021-08-04 04:46:04 字數 4667 閱讀 2309

ufunc是universal function的縮寫,它是一種能對陣列的每個元素進行操作的函式。本節主要介紹算術運算、比較運算和統計運算等函式。

add()函式,即加法運算,是最常用的算術運算函式。示例**:

>>>a = np.arange(0, 4)

>>>a

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

>>>b = np.arange(1, 5)

>>>b

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

>>>np.add(a, b)

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

>>>np.add(a, b, a)

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

>>>a

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

add()函式返回乙個新的陣列,此陣列的每個元素都為兩個引數陣列的對應元素之和。它接受的第3個引數指定計算結果所要寫入的陣列,如果指定的話,add()函式就不再產生新的陣列。由於python的操作符過載功能,計算兩個陣列相加可以簡單地寫為a + b,add(a, b, a)即表示為a+=b。

與加法類似,每乙個算術運算子與乙個ufunc函式對應,如下表所示:

表示式對應的ufunc函式

y = x1 + x2

add(x1, x2 [, y])

y = x1 - x2

subtract(x1, x2 [, y])

y = x1 * x2

multiply(x1, x2 [, y])

y = x1/x2

divide(x1, x2 [, y]),如果兩個陣列的元素為整數,那麼用整數除法

y = x1/x2

true_divide(x1, x2 [, y]),總是返回精確的商

y = x1//x2

floor_divide(x1, x2 [, y]),總是對返回的值取整

y = -x

negative(x [, y]),取反

y = x1 ** x2

power(x1, x2 [, y])

y = x1 % x2

remainder(x1, x2 [, y]),mod(x1, x2 [, y])

陣列物件支援算術運算操作符,極大地簡化了算式的編寫。除了基本的算術運算操作,ufunc也提供其他數學函式,如下表所示:

函式名功能說明

abs()

絕對值floor()

向下取整

exp()

指數函式

log()

對數函式

sqrt()

平方根函式

sin()

正弦函式

cos()

余弦函式

示例**:

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

>>>exp(a)

array([ 2.71828183, 7.3890561 , 20.08553692, 54.59815003])

>>>log(a)

array([ 0. , 0.69314718, 1.09861229, 1.38629436])

>>>sqrt(a)

array([ 1. , 1.41421356, 1.73205081, 2. ])

使用==、>等比較運算子對兩個陣列進行比較,將返回乙個布林陣列,它的每個元素值都是兩個陣列對應元素的比較結果。示例**:

>>>np.array([1, 2, 3]) < np.array([3, 2, 1])

array( [true, false, false]), dtype = bool )

每乙個比較運算子與乙個ufunc函式對應,如下表所示:

表示式對應的ufunc函式

y = x1 == x2

equal(x1, x2 [, y])

y = x1 != x2

not_equal(x1, x2 [, y])

y = x1 < x2

less(x1, x2 [, y])

y = x1 <= x2

less_equal(x1, x2 [, y])

y = x1 > x2

greater(x1, x2 [, y])

y = x1 >= x2

greater_equal(x1, x2 [, y])

此外,乙個陣列也可以跟指定值進行比較,其規則等價於陣列中的每個元素與指定值進行對比,結果為真返回true,為假返回false,示例**:

>>>arr = np.random.randint(0,10,size=(4, 4))

>>>arr

array([[6, 2, 5, 6],

[3, 5, 1, 3],

[0, 9, 0, 7],

[2, 1, 7, 0]])

>>>arr == 1

array([[false, false, false, false],

[false, false, true, false],

[false, false, false, false],

[false, true, false, false]], dtype=bool)

>>>arr > 3

array([[ true, false, true, true],

[false, true, false, false],

[false, true, false, true],

[false, false, true, false]], dtype=bool)

>>>arr[:, 1] == 5

#指定第2列所有值是否等於5

array([false, true, false, false], dtype=bool)

使用統計函式可以描述陣列元素的各種統計指標,以sum()函式為例,sum()計算陣列元素之和,當陣列是多維時,它計算陣列中所有元素之和。示例**:

>>>a = np.random.randint(0, 10, size=(4, 5))

>>>a

>>>np.sum(a)

如果指定axis引數,則求和運算沿著指定的軸進行。在上面的例子中,陣列a的第0軸的長度是4,第1軸的長度是5。如果axis引數為1,則對每行上的5個數求和,所得的結果是長度為4的一維陣列。如果引數axis為0,則對每列上的4個數求和,結果是長度為5的一維陣列。示例**:

>>>np.sum(a, axis = 1)

>>>np.sum(a, axis = 0)

主要使用的統計函式及功能如下表所示:

函式名功能

sum求和

mean

求期望median

求中位數

std求標準差

var求方差

cumsum

求累加和

min求最小值

max求最大值

以上函式的引數與sum()相同,且注意axis引數參與運算的軸的對應位置。

ufunc函式除了參與對陣列的各種運算,也提供對陣列元素排序的方法和函式。注意,陣列的sort()方法對陣列進行排序,它會改變陣列的內容;sort()函式返回乙個新陣列。它們的axis預設值都為-1,即沿著陣列的最終軸進行排序。sort()函式的axis引數可以設定為none,此時它將得到平坦化之後進行排序的新陣列。示例**:

>>>a = np.random.randint(0, 10, size=(4, 5))

>>>a

array([[1, 2, 3, 0, 1],

[4, 5, 3, 3, 7],

[5, 8, 3, 4, 7],

[3, 0, 6, 9, 0]])

>>>b = np.sort(a)

>>>b

array([[0, 1, 1, 2, 3],

[3, 3, 4, 5, 7],

[3, 4, 5, 7, 8],

[0, 0, 3, 6, 9]])

>>>c = np.sort(a, axis = 0)

>>>c

array([[1, 0, 3, 0, 0],

[3, 2, 3, 3, 1],

[4, 5, 3, 4, 7],

[5, 8, 6, 9, 7]])

>>>d = np.sort(a, axis = none)

>>>d

array([0, 0, 0, 1, 1, 2, 3, 3, 3, 3, 3, 4, 4, 5, 5, 6, 7, 7, 8, 9])

>>>a.sort()

>>>a

array([[0, 1, 1, 2, 3],

[3, 3, 4, 5, 7],

[3, 4, 5, 7, 8],

[0, 0, 3, 6, 9]])

在上面的例子中,np.sort(a)對a中每行的陣列進行排序,np.sort(a, axis=0)對陣列a每列上的數值進行排序,np.sort(a, axis = none)得到排序後的一維陣列,以上三個函式沒有改變陣列a的內容;而a.sort()的方法則改變了陣列a的內容,且以行進行排序(等價於axis=1)。

3 5物件陣列 C

1.簡介 物件陣列和普通陣列沒有本質的區別,只不過普通陣列的元素是簡單變數,而物件陣列的元素是物件而已。物件陣列在實際中的主要應用在系統需要乙個類的多個物件的情況。例如需要建立100學生檔案,每個檔案包括姓名,性別,年齡等內容。例如下面 student students 宣告了100個學生陣列,系統...

35 陣列中的逆序對

題目 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 輸入描述 題目保證輸入的陣列中沒有的相同的數字 資料範圍 對於 50的資料,size 10 ...

35 陣列中的逆序對

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 順序掃瞄整個陣列,每掃瞄到乙個數字的時候,逐個比較該數字和它後面的數字的大小。如果後面的數字比它小...