用實踐帶領你進入numpy的世界——(四):numpy基本函數運算(sum,mean……)

                         QQ:3020889729                                                                                 小蔡

本節主要講解numpy基本函數運算:最大值,最小值,總和,平均值,乘積,標準偏差


在這裏插入圖片描述


本文以jupyter notebook格式展開~

引入numpy庫

import numpy as np

創建隨機的數組數據

——以提供後續的運算操作
創建數組——採用random

data_one = np.random.rand(3, 8)
data_two = np.random.randint(-5, 5, (4, 3))

查看數組數據內容——data,size,dtype,ndim

print("(data_one)\n數組大小:size = {0}\n數組軸數: ndim = {1} \n數組內容:\n{2}, dtype= {3}".format(data_one.size, data_one.ndim, data_one, data_one.dtype))
print("")  # 輸出空行以顯示數據易讀
print("(data_two)\n數組大小:size = {0}\n數組軸數: ndim = {1}\n數組內容:\n{2}, dtype= {3}".format(data_two.size, data_two.ndim, data_two, data_two.dtype))

結果(打印):
(data_one)
數組大小:size = 24
數組軸數: ndim = 2
數組內容:
[[0.28483449 0.44235079 0.27778358 0.0241186 0.6076694 0.56056391
0.95386542 0.33498075]
[0.3277708 0.20498337 0.76559908 0.81589987 0.67358283 0.5172844
0.06858265 0.98480717]
[0.74231181 0.36567503 0.64228063 0.31659345 0.70477214 0.10638334
0.23839138 0.32721258]], dtype= float64

(data_two)
數組大小:size = 12
數組軸數: ndim = 2
數組內容:
[[ 3 -2 -1]
[ 4 -3 -1]
[ 0 2 3]
[-2 -5 0]], dtype= int32


接下來首先講解對整個數組的函數運算,再講解沿某一軸進行運算


對數組所有元素進行直接運算


sum()求和函數

print("data_one: \n{0}".format(data_one))
print("")  # 輸出空行以顯示數據易讀
print("data_two: \n{0}".format(data_two))
print("")  # 輸出空行以顯示數據易讀
print("np.sum(data_one): \n{0}".format(np.sum(data_one)))  # 對所有單元進行求和
print("")  # 輸出空行以顯示數據易讀
print("np.sum(data_two): \n{0}".format(np.sum(data_two)))  # 對所有單元進行求和

結果(打印):
data_one:
[[0.28483449 0.44235079 0.27778358 0.0241186 0.6076694 0.56056391
0.95386542 0.33498075]
[0.3277708 0.20498337 0.76559908 0.81589987 0.67358283 0.5172844
0.06858265 0.98480717]
[0.74231181 0.36567503 0.64228063 0.31659345 0.70477214 0.10638334
0.23839138 0.32721258]]

data_two:
[[ 3 -2 -1]
[ 4 -3 -1]
[ 0 2 3]
[-2 -5 0]]

np.sum(data_one):
11.288297481525387

np.sum(data_two):
-2


min(),max()求最值函數


max——求最大值

print("data_one: \n{0}".format(data_one))
print("")  # 輸出空行以顯示數據易讀
print("data_two: \n{0}".format(data_two))
print("")  # 輸出空行以顯示數據易讀
print("np.min(data_one): \n{0}".format(np.min(data_one)))  # 對所有單元進行最小值求取
print("")  # 輸出空行以顯示數據易讀
print("np.min(data_two): \n{0}".format(np.min(data_two)))  # 對所有單元進行最小值求取

結果(打印):
data_one:
[[0.28483449 0.44235079 0.27778358 0.0241186 0.6076694 0.56056391
0.95386542 0.33498075]
[0.3277708 0.20498337 0.76559908 0.81589987 0.67358283 0.5172844
0.06858265 0.98480717]
[0.74231181 0.36567503 0.64228063 0.31659345 0.70477214 0.10638334
0.23839138 0.32721258]]

data_two:
[[ 3 -2 -1]
[ 4 -3 -1]
[ 0 2 3]
[-2 -5 0]]

np.min(data_one):
0.024118603470602018

np.min(data_two):
-5


min()——求最小值

print("np.max(data_one): \n{0}".format(np.max(data_one)))  # 對所有單元進行最大值求取
print("")  # 輸出空行以顯示數據易讀
print("np.max(data_two): \n{0}".format(np.max(data_two)))  # 對所有單元進行最大值求取

結果(打印):
np.max(data_one):
0.9848071728962707

np.max(data_two):
4


mean()求平均函數

print("data_one: \n{0}".format(data_one))
print("")  # 輸出空行以顯示數據易讀
print("data_two: \n{0}".format(data_two))
print("")  # 輸出空行以顯示數據易讀
print("np.mean(data_one): \n{0}".format(np.mean(data_one)))  # 對所有單元進行平均值求取
print("")  # 輸出空行以顯示數據易讀
print("np.mean(data_two): \n{0}".format(np.mean(data_two)))  # 對所有單元進行平均值求取

結果(打印):
data_one:
[[0.28483449 0.44235079 0.27778358 0.0241186 0.6076694 0.56056391
0.95386542 0.33498075]
[0.3277708 0.20498337 0.76559908 0.81589987 0.67358283 0.5172844
0.06858265 0.98480717]
[0.74231181 0.36567503 0.64228063 0.31659345 0.70477214 0.10638334
0.23839138 0.32721258]]

data_two:
[[ 3 -2 -1]
[ 4 -3 -1]
[ 0 2 3]
[-2 -5 0]]

np.mean(data_one):
0.4703457283968911

np.mean(data_two):
-0.16666666666666666


std()求標準偏差(標準方差)

print("data_one: \n{0}".format(data_one))
print("")  # 輸出空行以顯示數據易讀
print("data_two: \n{0}".format(data_two))
print("")  # 輸出空行以顯示數據易讀
print("np.std(data_one): \n{0}".format(np.std(data_one)))  # 對所有單元進行標準偏差值求取
print("")  # 輸出空行以顯示數據易讀
print("np.std(data_two): \n{0}".format(np.std(data_two)))  # 對所有單元進行標準偏差值求取

結果(打印):
data_one:
[[0.28483449 0.44235079 0.27778358 0.0241186 0.6076694 0.56056391
0.95386542 0.33498075]
[0.3277708 0.20498337 0.76559908 0.81589987 0.67358283 0.5172844
0.06858265 0.98480717]
[0.74231181 0.36567503 0.64228063 0.31659345 0.70477214 0.10638334
0.23839138 0.32721258]]

data_two:
[[ 3 -2 -1]
[ 4 -3 -1]
[ 0 2 3]
[-2 -5 0]]

np.std(data_one):
0.2674934506033342

np.std(data_two):
2.6087459737497545


對數組指定軸進行運算


爲sum()函數添加軸參數,對指定軸進行求和

print("data_one: \n{0}".format(data_one))
print("")  # 輸出空行以顯示數據易讀
print("data_two: \n{0}".format(data_two))
print("")  # 輸出空行以顯示數據易讀
print("np.sum(data_one, axis=0): \n{0}".format(np.sum(data_one, axis=0)))  # 對第0軸所有單元進行求和
print("")  # 輸出空行以顯示數據易讀
print("np.sum(data_two, axis=0): \n{0}".format(np.sum(data_two, axis=0)))  # 對第0軸所有單元進行求和

結果(打印):
data_one:
[[0.28483449 0.44235079 0.27778358 0.0241186 0.6076694 0.56056391
0.95386542 0.33498075]
[0.3277708 0.20498337 0.76559908 0.81589987 0.67358283 0.5172844
0.06858265 0.98480717]
[0.74231181 0.36567503 0.64228063 0.31659345 0.70477214 0.10638334
0.23839138 0.32721258]]

data_two:
[[ 3 -2 -1]
[ 4 -3 -1]
[ 0 2 3]
[-2 -5 0]]

np.sum(data_one, axis=0):
[1.3549171 1.01300919 1.68566329 1.15661192 1.98602437 1.18423165
1.26083946 1.64700051]

np.sum(data_two, axis=0):
[ 5 -8 1]


對指定軸進行運算的說明:

  1. 首先說明軸怎麼計算——[1,2,3]:僅含有1個軸,第0軸;[[1,2,3]]:則含有兩個軸,第0軸和第1軸……依次遞推(類似多維數組的定義)

  2. 對於一個矩陣(擁有兩軸的數組)(如下)進行第0軸的sum運算,基本過程如下:
    [[1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]] (該矩陣爲3*3的矩陣)
    sum運算過程如下:(第0軸求和)
    1.首先看屬於第0軸的元素:[1, 2, 3], [4, 5, 6], [7, 8, 9]——這就是當前數組中,第0軸的所有元素
    2.進行第0軸元素求和:假設元素用字母表示,依次爲,a1,a2,a3
    3.又因爲a1,a2,a3又本身是一個向量形式,所以運算a1+a2+a3,就變成了三個向量的加法運算。
    4.最後得到的不過是多個向量的相加結果而已。(我想這裏你已經察覺到,向量維度應該保證相同,否則會出錯)
    結果:[12, 15, 18]


對第1軸進行sum運算

print("data_one: \n{0}".format(data_one))
print("")  # 輸出空行以顯示數據易讀
print("data_two: \n{0}".format(data_two))
print("")  # 輸出空行以顯示數據易讀
print("np.sum(data_one, axis=1): \n{0}".format(np.sum(data_one, axis=1)))  # 對第1軸所有單元進行求和
print("")  # 輸出空行以顯示數據易讀
print("np.sum(data_two, axis=1): \n{0}".format(np.sum(data_two, axis=1)))  # 對第1軸所有單元進行求和

結果(打印):
data_one:
[[0.28483449 0.44235079 0.27778358 0.0241186 0.6076694 0.56056391
0.95386542 0.33498075]
[0.3277708 0.20498337 0.76559908 0.81589987 0.67358283 0.5172844
0.06858265 0.98480717]
[0.74231181 0.36567503 0.64228063 0.31659345 0.70477214 0.10638334
0.23839138 0.32721258]]

data_two:
[[ 3 -2 -1]
[ 4 -3 -1]
[ 0 2 3]
[-2 -5 0]]

np.sum(data_one, axis=1):
[3.48616695 4.35851018 3.44362035]

np.sum(data_two, axis=1):
[ 0 0 5 -7]


對第1軸的運算,不過是將求和目標區域移動到了[[a1],[a2]],對a1,a2分別進行求和而已。(第0軸是[[a1],[a2]]中的[a1]和[a2]求和)


接下來展示之前講到的其它運算的軸計算


max()進行軸運算

print("data_one: \n{0}".format(data_one))
print("")  # 輸出空行以顯示數據易讀
print("np.max(data_one, axis=0): \n{0}".format(np.max(data_one, axis=0)))  # 對第0軸所有單元進行求最大值
print("")  # 輸出空行以顯示數據易讀
print("np.max(data_two, axis=1): \n{0}".format(np.max(data_one, axis=1)))  # 對第1軸所有單元進行求最大值

結果(打印):
data_one:
[[0.28483449 0.44235079 0.27778358 0.0241186 0.6076694 0.56056391
0.95386542 0.33498075]
[0.3277708 0.20498337 0.76559908 0.81589987 0.67358283 0.5172844
0.06858265 0.98480717]
[0.74231181 0.36567503 0.64228063 0.31659345 0.70477214 0.10638334
0.23839138 0.32721258]]

np.max(data_one, axis=0):
[0.74231181 0.44235079 0.76559908 0.81589987 0.70477214 0.56056391
0.95386542 0.98480717]

np.max(data_two, axis=1):
[0.95386542 0.98480717 0.74231181]


min()進行軸運算

print("data_one: \n{0}".format(data_one))
print("")  # 輸出空行以顯示數據易讀
print("np.min(data_one, axis=0): \n{0}".format(np.min(data_one, axis=0)))  # 對第0軸所有單元進行求最小值
print("")  # 輸出空行以顯示數據易讀
print("np.min(data_two, axis=1): \n{0}".format(np.min(data_one, axis=1)))  # 對第1軸所有單元進行求最小值

結果(打印):
data_one:
[[0.28483449 0.44235079 0.27778358 0.0241186 0.6076694 0.56056391
0.95386542 0.33498075]
[0.3277708 0.20498337 0.76559908 0.81589987 0.67358283 0.5172844
0.06858265 0.98480717]
[0.74231181 0.36567503 0.64228063 0.31659345 0.70477214 0.10638334
0.23839138 0.32721258]]

np.min(data_one, axis=0):
[0.28483449 0.20498337 0.27778358 0.0241186 0.6076694 0.10638334
0.06858265 0.32721258]

np.min(data_two, axis=1):
[0.0241186 0.06858265 0.10638334]


mean()進行軸運算

print("data_one: \n{0}".format(data_one))
print("")  # 輸出空行以顯示數據易讀
print("np.mean(data_one, axis=0): \n{0}".format(np.mean(data_one, axis=0)))  # 對第0軸所有單元進行求平均值
print("")  # 輸出空行以顯示數據易讀
print("np.mean(data_two, axis=1): \n{0}".format(np.mean(data_one, axis=1)))  # 對第1軸所有單元進行求平均值

結果(打印):
data_one:
[[0.28483449 0.44235079 0.27778358 0.0241186 0.6076694 0.56056391
0.95386542 0.33498075]
[0.3277708 0.20498337 0.76559908 0.81589987 0.67358283 0.5172844
0.06858265 0.98480717]
[0.74231181 0.36567503 0.64228063 0.31659345 0.70477214 0.10638334
0.23839138 0.32721258]]

np.mean(data_one, axis=0):
[0.45163903 0.33766973 0.56188776 0.38553731 0.66200812 0.39474388
0.42027982 0.54900017]

np.mean(data_two, axis=1):
[0.43577087 0.54481377 0.43045254]


std()進行軸運算

print("data_one: \n{0}".format(data_one))
print("")  # 輸出空行以顯示數據易讀
print("np.std(data_one, axis=0): \n{0}".format(np.std(data_one, axis=0)))  # 對第0軸所有單元進行求標準偏差值
print("")  # 輸出空行以顯示數據易讀
print("np.std(data_two, axis=1): \n{0}".format(np.std(data_one, axis=1)))  # 對第1軸所有單元進行求標準偏差值

結果(打印):
data_one:
[[0.28483449 0.44235079 0.27778358 0.0241186 0.6076694 0.56056391
0.95386542 0.33498075]
[0.3277708 0.20498337 0.76559908 0.81589987 0.67358283 0.5172844
0.06858265 0.98480717]
[0.74231181 0.36567503 0.64228063 0.31659345 0.70477214 0.10638334
0.23839138 0.32721258]]

np.std(data_one, axis=0):
[0.20628278 0.09890752 0.20710424 0.3268989 0.04047811 0.20466579
0.38361782 0.30817841]

np.std(data_two, axis=1):
[0.26003502 0.30053198 0.21997313]


最後做一個總結:

實用性說明:

  1. 很多時候,我們用到多軸的array數組構成數據串或者各種各樣的數據陣;當我們處理時,如果要自己獨立編寫函數進行計算的話,效率和運算複雜都是不讓人樂觀的——所以這時候,採用numpy的計算函數進行計算,會方便許多。

內容總結:

  1. 對數組整體進行函數運算——可以得到數據整體的數據情況。(比如mean(),所有數據的平均值)

  2. 對數組進行按指定軸運算——可以得到不同部分的數據情況。(比如mean(axis=0),如果我們的數據是二維矩陣,這就相當於按列計算平均值;同樣的,如果使用mean(axis=1),則是進行按行計算平均值。)

如果讀完的你有所收穫,希望勤奮如你不吝點贊+收藏!(還有其它基礎部分發布完後,會有最後一階段實踐的運算操作,比如:神經網絡中層間權重的計算,反向傳播算法等的是實現)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章