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 順序掃瞄整個陣列,每掃瞄到乙個數字的時候,逐個比較該數字和它後面的數字的大小。如果後面的數字比它小...