什么是numpy?
??Numpy是Numerical Python 的簡稱,它是python數(shù)值計算中最為重要的基礎(chǔ)包.大多數(shù)計算包都提供了基于NumPy的科學(xué)函數(shù)功能,將NumPy的數(shù)組對象作為數(shù)據(jù)交換的通用語.
為什么要用Numpy
??Numpy提供了一個非常易用的API,將數(shù)據(jù)傳給底層語言編寫的外部類庫,再由外部類庫將計算結(jié)果按照Numpy數(shù)組的方式返回,變得非常簡單.Numpy本身不提供建模和科學(xué)函數(shù),理解Numpy的數(shù)組以及基于數(shù)組的計算將幫助你更高效的使用基于數(shù)組的工具,比如Pandas.
在Numpy中:
- ndarry,一種高效多維數(shù)組,提供了基于數(shù)組的便捷算術(shù)操作以及靈活的廣播功能.
- 對所有數(shù)據(jù)進(jìn)行快速矩陣計算,而無須編寫循環(huán)程序
- 對硬盤中數(shù)組數(shù)據(jù)進(jìn)行讀寫的工具,并對內(nèi)存映射文件進(jìn)行操作.
- 線性代數(shù),隨機(jī)數(shù)生成以及傅里葉變換功能.
- 用于連接NumPy到c,c++和FORTRAN語言類庫的C語言API
怎么用Numpy
Numpy主要用于數(shù)據(jù)分析:
- 在數(shù)據(jù)清理,清洗,構(gòu)造子集,過濾,變換以及其他計算中進(jìn)行快速的向量計算.
- 常見的數(shù)組計算,比sort,unique以及set操作.
- 高效的描述性統(tǒng)計和聚合/概述數(shù)據(jù).
- 數(shù)據(jù)排列和相關(guān)數(shù)據(jù)操作,例如對異構(gòu)數(shù)據(jù)進(jìn)行merge 和 join.
- 使用數(shù)組表達(dá)式來表明條件邏輯,代替if-elif-else條件分支的循環(huán).
- 分組數(shù)據(jù)操作
Numpy的數(shù)據(jù)分析如此重要,其中一個原因就是它對處理大量數(shù)組的數(shù)據(jù)非常有效:
- Numpy在內(nèi)部將數(shù)據(jù)儲存在連續(xù)的內(nèi)存塊上,這與其他的Python內(nèi)建數(shù)據(jù)結(jié)構(gòu)是不同的.Numpy的算法庫是用C語言寫的,所以在操作數(shù)據(jù)內(nèi)存時,不需要任何類型的檢查或者其他管理操作.Numpy數(shù)組使用的內(nèi)存量也小于其他的Python內(nèi)建序列.
- Numpy可以針對全量數(shù)組進(jìn)行復(fù)雜計算而不用寫Python循環(huán)
Numpy ndarray:多維數(shù)組對象
??Numpy的核心特征之一就是多維數(shù)組對象----ndarray
.ndarray
是Python中一個快速,靈活的大型數(shù)據(jù)集容器.數(shù)組允許使用類似于標(biāo)量的操作語法在整塊數(shù)據(jù)上進(jìn)行數(shù)學(xué)計算.
import numpy as np
data = np.random.randn(2,3)
print(data)
#[[-1.48808504 -0.12575993 -2.61587575]
# [ 0.18325062 1.95968089 -0.68765384]]
??在python中,需要用Numpy的話,需要用標(biāo)準(zhǔn)導(dǎo)入式導(dǎo)入import numpy as np
在Numpy這個包中包含了大量與python內(nèi)建函數(shù)重命名的函數(shù).
??一個ndarray
是一個通用的多維同類數(shù)據(jù)容器,其內(nèi)部的每一個元素都是相同類型的.每一個數(shù)組都有一個shape
屬性,用來描述ndarray
的結(jié)構(gòu).每一個數(shù)組都有一個dtype
屬性,用來描述數(shù)組的數(shù)據(jù)類型.
data.shape
#(2,3)#(行,列)
data.dtype
#dtype('float64')
ndarray = Numpy數(shù)組 = 數(shù)組
如何生成一個ndarray
??在生成一個數(shù)組的方法中最簡單的是array
函數(shù),array
函數(shù)接收任意的序列型對象,生成一個新的包含傳遞數(shù)據(jù)的Numpy數(shù)組.
data1 = [6,7.5,8,0,1]
arr1 = np.array(data1)
#array([6.,7,5,8.,0,1.])
在列表中輸入的有整型和浮點(diǎn)型,生成ndarray時整型升級成浮點(diǎn)型,
data2 = [[1,2,3,4],[5,6,7,8]]
arr2 = np.array(data2)
#array([[1,2,3,4],
# [5,6,7,8]])
??除了用np.array還有其他函數(shù)可以創(chuàng)建新數(shù)組.例如zeros可以一次性創(chuàng)造全0數(shù)組,ones可以一次性創(chuàng)造全1數(shù)組.empty則可以創(chuàng)建一個沒有初始化數(shù)值的數(shù)組.想要創(chuàng)建高維數(shù)組,則需要為shape傳遞一個元組.
np.zeros(3)
#array([0.,0.,0.])
np.zeros((2,3))
#array([[0.,0.,0.],
# [0.,0.,0.]])
arange
是Python內(nèi)建函數(shù)range的數(shù)字版,返回一個數(shù)組
np.arange(3)
#array([0,1,2])
Numpy數(shù)據(jù)類型
??數(shù)據(jù)類型,即dytpe,是一個特殊的對象,是ndarray
的元數(shù)據(jù),即:表示數(shù)據(jù)的數(shù)據(jù).
arr1 = np.array([1,2,3],dtype = np.float64)
arr2 = np.array([1,2,3],dtype = np.int32)
??在Numpy中的數(shù)據(jù)類型與python中相同,比如int
,float
,str
,'bool',在數(shù)據(jù)分析中只需要記住這幾類就行,但是在需要內(nèi)存或硬盤是做更深入的存取操作時,尤其是大數(shù)據(jù)集時,才需要記住數(shù)據(jù)類型.