目錄
1.簡介
2.ndarray
3.通用函數
4.其他
Numpy是高性能科學計算和數據分析的基礎包。它也是pandas等其他數據分析的工具的基礎,基本所有數據分析的包都用過它。NumPy為Python帶來了真正的多維數組功能,並且提供了豐富的函數庫處理這些數組。它將常用的數學函數都支持向量化運算,使得這些數學函數能夠直接對數組進行操作,將本來需要在Python級別進行的循環,放到C語言的運算中,明顯地提高了程序的運算速度。
安裝方法:
pip install numpy
引用方式:
import numpy as np
這是官方認證的導入方式,可能會有人說為什麼不用from numpy import *,是因為在numpy當中有一些方法與Python中自帶的一些方法,例如max、min等衝突,為了避免這些麻煩大家就約定俗成的都使用這種方法。
2、ndarray -多維數組對象Numpy的核心特徵就是N-維數組對——ndarray.
1、為什麼要是用ndarray?接下來我們可以通過具體的實例來展示一下ndarray的優勢。
現在有這樣一個需求:
已知若干家跨國公司的市值(美元),將其換算為人民幣按照Python當中的方法
第一種:是將所有的美元通過for循環依次迭代出來,然後用每個公司的市值乘以匯率
第二種:通過map方法和lambda函數映射
這些方法相對來說也挺好用的,但是再來看通過ndarray對象是如何計算的
通過ndarray這個多維數組對象可以讓這些批量計算變得更加簡單,當然這隻它其中一種優勢,接下來就通過具體的操作來發現。
2、創建ndarray對象np.array()3、ndarray是一個多維數組列表接下來就多維數組舉個例子:
有的人可能會說了,這個數組跟Python中的列表很像啊,它和列表有什麼區別呢?
4、常用屬性屬性描述
T數組的轉置(對高維數組而言)
dtype數組元素的數據類型
size數組元素的個數
ndim數組的維數
shape數組的維度大小(以元組形式)T:轉置
li1 = [
[1,2,3],
[4,5,6]
]
a = np.array(li1)
a.T
執行結果:
array([[1, 4],
[2, 5],
[3, 6]])
就相當於是將行變成列,列變成行,它也是一個比較常用的方法5、數據類型類型描述
布爾型bool_
整型int_ int8 int16 int32 int 64
無符號整型uint8 uint16 uint32 uint64
浮點型float_ float16 float32 float64
複數型complex_ complex64 complex128整型:
int32隻能表示(-2**31,2**31-1),因為它只有32個位,只能表示2**32個數
無符號整型:
只能用來存正數,不能用來存負數
補充:
astype()方法可以修改數組的數據類型6、ndarray-創建方法描述
array()將列錶轉換為數組,可選擇顯式指定dtype
arange()range的numpy版,支持浮點數
linspace()類似arange(),第三個參數為數組長度
zeros()根據指定形狀和dtype創建全0數組
ones()根據指定形狀和dtype創建全1數組
empty()根據指定形狀和dtype創建空數組(隨機值)
eye()根據指定邊長和dtype創建單位矩陣1、arange():
np.arange(1.2,10,0.4)
執行結果:
array([1.2, 1.6, 2. , 2.4, 2.8, 3.2, 3.6, 4. , 4.4, 4.8, 5.2, 5.6, 6. ,
6.4, 6.8, 7.2, 7.6, 8. , 8.4, 8.8, 9.2, 9.6])
# 在進行數據分析的時候通常我們遇到小數的機會遠遠大於遇到整數的機會,這個方法與Python內置的range的使用方法一樣
2、linspace()
np.linspace(1,10,20)
執行結果:
array([ 1. , 1.47368421, 1.94736842, 2.42105263, 2.89473684,
3.36842105, 3.84210526, 4.31578947, 4.78947368, 5.26315789,
5.73684211, 6.21052632, 6.68421053, 7.15789474, 7.63157895,
8.10526316, 8.57894737, 9.05263158, 9.52631579, 10. ])
# 這個方法與arange有一些區別,arange是顧頭不顧尾,而這個方法是顧頭又顧尾,在1到10之間生成的二十個數每個數字之間的距離相等的,前後兩個數做減法肯定相等
----
3、zeros()
np.zeros((3,4))
執行結果:
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
# 會用0生成三行四列的一個多維數組
----
4、ones()
np.ones((3,4))
執行結果:
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
# 會用1生成三行四列的一個多維數組
--
5、empty()
np.empty(10)
執行結果:
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
# 這個方法只申請內存,不給它賦值
-
6、eye()
np.eye(5)
執行結果:
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])7、索引和切片li1 = [
[1,2,3],
[4,5,6]
]
a = np.array(li1)
a * 2
運行結果:
array([[ 2, 4, 6],
[ 8, 10, 12]])
# l2數組
l2 = [
[1,2,3],
[4,5,6]
]
a = np.array(l2)
# l3數組
l3 = [
[7,8,9],
[10,11,12]
]
b = np.array(l3)
a + b # 計算
執行結果:
array([[ 8, 10, 12],
[14, 16, 18]])# 將一維數組變成二維數組
arr = np.arange(30).reshape(5,6) # 後面的參數6可以改為-1,相當於佔位符,系統可以自動幫忙算幾列
arr
# 將二維變一維
arr.reshape(30)
# 索引使用方法
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29]])
現在有這樣一組數據,需求:找到20
列表寫法:arr[3][2]
數組寫法:arr[3,2] # 中間通過逗號隔開就可以了arr數組
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29]])
arr[1:4,1:4] # 切片方式
執行結果:
array([[ 7, 8, 9],
[13, 14, 15],
[19, 20, 21]])切片不會拷貝,直接使用的原視圖,如果硬要拷貝,需要在後面加.copy()方法
最後會發現修改切片後的數據影響的依然是原數據。有的人可能對一點機制有一些不理解的地方,像Python中內置的都有賦值的機制,而Numpy去沒有,其實是因為NumPy的設計目的是處理大數據,所以你可以想像一下,假如NumPy堅持要將數據複製來複製去的話會產生何等的性能和內存問題。
現在有這樣一個需求:給一個數組,選出數組種所有大於5的數。
現在有這樣一個需求:給一個數組,選出數組種所有大於5的數。
li = [random.randint(1,10) for _ in range(30)]
a = np.array(li)
a[a>5]
執行結果:
array([10, 7, 7, 9, 7, 9, 10, 9, 6, 8, 7, 6])
-
原理:
a>5會對a中的每一個元素進行判斷,返回一個布爾數組
a > 5的運行結果:
array([False, True, False, True, True, False, True, False, False,
False, False, False, False, False, False, True, False, True,
False, False, True, True, True, True, True, False, False,
False, False, True])
-
布爾型索引:將同樣大小的布爾數組傳進索引,會返回一個有True對應位置的元素的數組3、通用函數能對數組中所有元素同時進行運算的函數就是通用函數
常見通用函數:
能夠接受一個數組的叫做一元函數,接受兩個數組的叫二元函數,結果返回的也是一個數組
函數功能
abs、fabs分別是計算整數和浮點數的絕對值
sqrt計算各元素的平方根
square計算各元素的平方
exp計算各元素的指數e**x
log計算自然對數
sign計算各元素的正負號
ceil計算各元素的ceiling值
floor計算各元素floor值,即小於等於該值的最大整數
rint計算各元素的值四捨五入到最接近的整數,保留dtype
modf將數組的小數部分和整數部分以兩個獨立數組的形式返回,與Python的divmod方法類似
isnan計算各元素的正負號
isinf表示那些元素是無窮的布爾型數組
cos,sin,tan普通型和雙曲型三角函數
函數功能
add將數組中對應的元素相加
subtract從第一個數組中減去第二個數組中的元素
multiply數組元素相乘
divide、floor_divide除法或向下圓整除法(捨棄餘數)
power對第一個數組中的元素A,根據第二個數組中的相應元素B計算A**B
maximum,fmax計算最大值,fmax忽略NAN
miximum,fmix計算最小值,fmin忽略NAN
mod元素的求模計算(除法的餘數)補充內容:浮點數特殊值
浮點數:float
浮點數有兩個特殊值:
1、nan(Not a Number):不等於任何浮點數(nan != nan)
2、inf(infinity):比任何浮點數都大
3.1、數學統計方法函數功能
sum求和
cumsum求前綴和
mean求平均數
std求標準差
var求方差
min求最小值
max求最大值
argmin求最小值索引
argmax求最大值索引
3.2、隨機數隨機數生成函數在np.random的子包當中
常用函數
函數功能
rand給定形狀產生隨機數組(0到1之間的數)
randint給定形狀產生隨機整數
chocie給定形狀產生隨機選擇
shuffle與random.shuffle相同
uniform給定形狀產生隨機數組