python多维数据分析_Python 数据分析:numpy 多维数组 ndarray
下面的文章中,將使用約定俗成的模塊名 np 來表示 NumPy 庫。
1. 多維數組的創建
NumPy 提供了許多常用的函數來創建多維數組,先概覽這些函數的名稱及功能。
函數
說明
array
將輸入數據轉換為ndarray,可顯式指定dtype。
asarray
將輸入轉換為ndarray,如果輸入本身為ndarray則不復制。
arange
類似于range函數,返回的是ndarray而不是列表。
ones、ones_like
根據指定的形狀和dtype創建一個全1數組。ones_like以另一個數組為參數,并根據其形狀和dtype創建一個全1數組。
zeros、zeros_like
類似于ones和ones_like,只不過產生的是全0數組。
empty、empty_like
創建新數組,只分配內存但不填充任何值。
eye、identity
創建一個N*N單位矩陣(對角線為1,其余為0)。
array
語法:
示例:
array 接受一切序列型對象,返回一個 NumPy 數組(ndarray)。如果我們沒有指定元素的數據類型,那么 array 會自動為數組選擇一個合適的數據類型,保存到 dtype 對象中。
2. dtype數據類型
類型
類型代碼
說明
int8
i1、u1
8位整型
int16
i2、u2
16位整型
int32
i4、u4
32位整型
int64
i8、u8
64位整型
float16
f2
半精度浮點數
float32
f4或f
標準單精度浮點數。與C的float兼容。
float64
f8或d
標準雙精度浮點數,與C的double和Python的float對象兼容。
float128
f16或g
擴展精度浮點數
complex64、complex128、complex256
c32
復數
bool
?
布爾類型(True或False)
object
O
Python對象類型
string
S
定長字符串類型(每字符1字節)。
unicode
U
定長unicode類型(字節數由平臺決定)。跟字符串的定義方式一樣。
創建 ndarray 對象時,可以使用類型代碼來表示 dtype
ndarray 對象提供了 astype 方法來轉換其 dtype
3. 基本索引
與python內置的list類似,ndarray 對象也可以通過方括號來索引元素。例如:
不同之處在于,list的切片返回的是新對象,而 ndarray 切片后將返回原始數據的視圖。也就是說,對于切片的任何修改都會反映在源數組上。例如:
要得到一個新的對象,可以通過 arr[3:8].copy() 來獲得副本。
4. 高維度索引
Python 自身可以通過連續的方括號組合來索引多維數組,例如 arr[1][3] 。在 NumPy 中, ndarray 同樣支持這種基本的索引方式。除此之外,ndarray 還支持另一種索引方式:
通過逗號來分隔不同維度的索引,即獲取二維數組 arr 中第一行第三列的元素。
基于此,我們可以在各維度中分別進行切片索引:
這表示,獲取由二維數組的2、3、4行第0、1、2列元素所構成的3x3二維數組。
5. 布爾型索引
布爾型索引,就是用一個形狀與目標數組一模一樣的布爾型數組,來索引目標數組對應位置的元素。布爾型數組元素的值只有True和False兩種,True對應的目標數組元素將被選取,而False對應的元素將被忽略。
例如:
多維數組與常量的比較運算會廣播到每一個元素,也就是說,每個元素都會與該常量進行比較運算。我們可以利用這一點來生成布爾型索引數組:
常用的比較運算符有:==, !=, >, =, <=
還可以使用波浪號 ~ 對布爾型數組取反,相當于對每個元素取反。
如果有多個條件,可以使用 & 和 | 運算符進行與運算和或運算。
6. 花式索引
花式索引(Fancy indexing)指的是利用整數數組進行索引。花式索引總是產生新的數組對象。
花式索引通過傳入列表或數組,從而以特定順序選取行子集。例如:
如果要讓選定行子集的列,按指定順序排列,可以寫成:
上面代碼中,前部分 arr[[3, 2, 0]] 實際上就是上一個示例的結果。我們就是在上一個結果的基礎上進行索引,[:, [1, 2, 3, 0]],冒號表示選取所有行,而后面的列表指定了列的排列順序。
7. 索引總結
普通高維度索引、布爾型索引與花式索引這三者之間其實有規律可循。
我們以二維數組 arr2d 為例。
7.1. 形式一
第一種索引的形式為 arr2d[i]。由于 i 只是單個序列,只會篩選行子集,因此索引的結果包含所有列。
當 i 為單個數值時,結果是對應的行視圖
當 i 為 a:b 的形式時,結果是第 a 行到第 b-1 行的 b-a 個行子集視圖;
當 i 為列表或數組時:
如果 i 為形狀與 arr2d 相同的布爾型數組,則結果為 True 所對應的元素構成的新子集(布爾型索引);
如果元素為數值,結果是原數組對應行按列表或數組指定順序排列形成的新子集(花式索引);
如果元素為布爾值,結果是 True 所對應的行構成的新子集。
7.2. 形式二
第二種索引的形式為 arr2d[i, j]。由于 i,j 包含了每一個維度(此處為2),因此將對行和列進行篩選。
當 i、j 為數值時,結果是單個元素視圖;
當 i、j 均為 a:b 的形式時,結果是 i 篩選出的行子集與 j 篩選出的列子集的公共部分視圖;
當 i、j 均為列表時:
如果元素為數值,結果等價于 zip(i, j) 中每個坐標所代表的元素構成的新子集;
如果元素為布爾值,結果等價于 zip(i, j) 中兩個坐標值均為 True 的位置所對應的元素構成的新子集。
8. 轉置和軸對換
在前面的示例中,我們使用了 reshape() 方法來重塑數組。
此外,多維數組還有 transpose 方法,用于指定軸的轉置,返回源數據的視圖。
以及 T 屬性,返回轉置(軸對換)后的數組,T 屬性本身不可修改,但若賦值給別的變量,則會生成新的數組,可進行修改。
多維數組還有一個 swapaxes 方法,用于對換兩個軸,返回源數據的視圖。
9. 元素級數組函數
我們將用于多維數組中元素級運算的函數成為通用函數(ufunc),它們作用于每一個元素,接收一個或多個標量值,并產生一個或多個標量值。
9.1. 一元ufunc
函數
說明
abs、fabs
計算整數、浮點數或復數的絕對值。對于非復數值,可以使用更快的fabs
sqrt
計算平方根。相當于 arr ** 0.5
square
計算平方。相當于 arr ** 2
exp
計算指數 e^x
log、log10、log2、log1p
底數為e、10、2的對數及log(1+x)
sign
計算正負號:1(正數)、0(零)、-1(負數)
ceil
向上取整
floor
向下取整
rint
四舍五入到最接近的整數,保留dtype
modf
將數組的小數和整數部分以兩個獨立數組的形式返回
isnan
返回一個表示“哪些值是NaN(不是數字)”的布爾型數組
isfinite、isinf
分別返回一個表示“哪些元素是有窮的”或“哪些元素是無窮的”的布爾型數組
cos、cosh、sin、sinh、tan、tanh
普通型和雙曲型三角函數
arccos、arccosh、arcsin、arcsinh、arctan、arctanh
反三角函數
logical_not
計算各元素 not x 的真值。相當于 ~arr
9.2. 二元ufunc
函數
說明
add
元素相加
subtract
第一個數組元素減去第二個數組元素
multiply
元素相乘
divide、floor_divide
除法或向下圓整除法(丟棄余數)
power
對第一個數組中的元素A,根據第二個數組中的相應元素B,計算A^B
maximum、fmax
元素級的最大值計算。fmax將忽略NaN
minimum、fmin
元素級的最小值計算。fmin將忽略NaN
mod
元素級的求模計算(除法的余數)
copysign
將第二個數組中的值的符號復制給第一個數組中的值
greater、greater_equal、less、less_equal
執行元素級的比較運算,最終產生布爾型數組。相當于中綴運算符 >, >=,
logical_and、logical_or
執行元素級的真值邏輯運算。相當于中綴運算符 & | ^
10. 視圖、副本總結
返回源數據視圖:
arr[:3](基本索引)
arr[2:5, :3](高維度索引)
返回新數組:
arr.astype('f8')(類型轉換)
arr[:3].copy()(生成副本)
arr[bools](布爾型索引)
arr[[3, 2, 0]](花式索引)
參考文獻
《利用Python進行數據分析》
總結
以上是生活随笔為你收集整理的python多维数据分析_Python 数据分析:numpy 多维数组 ndarray的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python数据库连接池工具类_Pyth
- 下一篇: 闰年的判断方法_平年还是闰年?看一、二季