Python Numpy 100題實驗(六)mean(),set_printoptions()函式等
阿新 • • 發佈:2018-12-13
這一部分的主要內容:
- numpy.mean()
- 排序的一些例子
- numpy.set_printoptions()
對於隨機的3*3的二維陣列,減去陣列的每一行的平均值
a = np.random.randint(1, 10, (3,3))
print('Array a:')
print(a)
a =a - a.mean(axis=1, keepdims=True)
print('Result a:')
print(a)
輸出:
Array a: [[4 1 6] [9 5 3] [3 5 4]] Result a: [[ 0.33333333 -2.66666667 2.33333333] [ 3.33333333 -0.66666667 -2.66666667] [-1. 1. 0. ]]
注意numpy.mean()函式的呼叫格式:
numpy.mean(a, axis=None, dtype=None, out=None, keepdims= )
至於keepdims有什麼作用,寫個例子看一下就清楚了:
a = np.random.randint(1, 10, (3,3))
print('Array a:')
print(a)
print('keepdims = None')
print(a.mean(axis=1))
print('keepdims = True')
print(a.mean(axis=1, keepdims=True))
輸出:
Array a: [[7 8 1] [4 2 9] [6 7 4]] keepdims = None [5.33333333 5. 5.66666667] keepdims = True [[5.33333333] [5. ] [5.66666667]]
獲得二維陣列點積結果的對角線陣列
a = np.random.randint(1, 10, (3,3))
b = np.random.randint(1, 10, (3,3))
print('Array a:')
print(a)
print('Array b:')
print(b)
print('Result:')
print(np.diag(a.dot(b)))
輸出:
Array a:
[[6 4 2]
[3 2 5]
[6 1 6]]
Array b:
[[7 5 4]
[5 5 8]
[8 2 6]]
Result:
[78 35 68]
這裡樣例中給出了更快速的兩種方法:
a = np.random.randint(1, 10, (3,3))
b = np.random.randint(1, 10, (3,3))
print('Array a:')
print(a)
print('Array b:')
print(b)
print('Result:')
print(np.diag(a.dot(b)))
print('Result2:')
print(np.sum(a * b.T, axis=1))
print('Result3:')
print(np.einsum("ij, ji->i", a, b))
輸出:
Array a:
[[2 7 3]
[8 7 4]
[1 2 9]]
Array b:
[[4 5 8]
[9 7 2]
[5 4 3]]
Result:
[ 86 105 39]
Result2:
[ 86 105 39]
Result3:
[ 86 105 39]
找到隨機一維陣列中前p個最大值
a = np.random.randint(1, 10, 5)
p = 3 #前p個最大值
print('Original array: ')
print(a)
b = sorted(a)[::-1]
print('Result:')
print(b[:p])
參考答案:
a = np.random.randint(1, 10, 5)
p = 3
print('Original array: ')
print(a)
print('Result:')
print(a[np.argsort(a)[-p:]])
輸出:
Original array:
[1 5 9 2 3]
Result:
[3 5 9]
使用了argsort()函式,好吧,其實我學的還是不熟練。。。
計算隨機一維陣列中每個元素的4次方數值
使用陣列可以很方便地對陣列中所有的元素統一處理
a = np.random.randint(1, 10, 5)
print('Original array:')
print(a)
print('Result:')
print(np.power(a, 4))
輸出:
Original array:
[6 3 2 4 5]
Result:
[1296 81 16 256 625]
對於二維隨機陣列中的所有元素,保留2位小數
a = np.random.uniform(0, 3, (2,2))
print('Original array:')
print(a)
print('Result:')
print(np.floor(a*100)/100)
輸出:
Original array:
[[2.06304809 2.73927541]
[1.09291699 0.25479813]]
Result:
[[2.06 2.73]
[1.09 0.25]]
參考答案:
a = np.random.uniform(0, 3, (2))
print('Original array:')
print(a)
print('Result:')
np.set_printoptions(precision=2)
print(a)
直接設定了輸出格式,但是接下來所有的輸出都會有效,變為輸出兩位小數
使用科學記數法輸出Numpy陣列
a = np.random.random([3,3])
print(a/1e3) # 注意這裡是數字1而非字母l
使用Numpy找出百分位數(25%, 50%, 75%)
a = np.arange(15)
print('Array a:')
print(a)
print('Result:')
print(np.percentile(a, q=[25, 50, 75]))
輸出:
Array a:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
Result:
[ 3.5 7. 10.5]