& B2 |1 v; B j. MPython数据挖掘基础(二):Numpy目录 2 J) `4 y2 @8 |! L8 i0 V7 x& B" }8 R: e* n. X3 y/ k" Z
1. Numpy的优势 4 g: f+ X$ o1 }' d4 s6 y1 H9 V2. 数组属性8 U, J6 P2 |8 X% a6 S
3. 创建数组% _+ {4 a9 u& ` {: f+ f
4. 数组形状与类型变化& F" c7 K4 u% E5 z
4. 数组运算 ; j: ^4 m! }, N3 d4 @4.1 逻辑运算 4 A2 I7 d9 n, [# G3 k* X4.2 统计运算 . F/ V- i' s4 T- E2 ^4.3 数组间运算 + G, s& ~, u: Z( p4 \4.4 合并分割: U8 u: k* U4 d6 W
1. Numpy的优势2 A. _$ l. ^1 n2 X
+ @2 F. p. p9 S0 u* x# LPython已经提供了很多丰富的内置包,我们为什么还要学习NumPy呢?先看一个例子,找寻学习 NumPy 的必要性和重要性。如下: 2 C3 Y; K* p" j4 b2 i- g8 o% e( C O _( B' _' g8 b
完成同样的都对元素相加的操作,NumPy比Python快了11倍之多。这就是我们要学好NumPy的一个重要理由,它在处理更大数据量时,处理效率明显快于Python。并且内置的向量化运算和广播机制,使得使用NumPy更加简洁,会少写很多嵌套的for循环,因此代码的可读性大大增强。NumPy计算为什么这么快呢?原因如下:" U, z$ I: ]! U5 I
4 _2 n$ Y! ~( cPython 的 list是一个通用结构。它能包括任意类型的对象,并且是动态类型。0 }4 x) U" ^2 B! c1 D! j
NumPy 的 ndarray 是 静态、同质 的类型,当ndarray对象被创建时,元素的类型就确定。由于是静态类型,所以ndarray间的加、减、乘、除用 C 和 Fortran 实现才成为可能,所以运行起来就会更快。根据官方介绍,底层代码用 C语言 和 Fortran 语言实现,实现性能无限接近 C 的处理效率。 * C6 E* ?. A" U ]7 h
$ ?2 b# J" o( y二维数组示例代码如下:8 N% j) F: {! W+ Z! R$ J
% @5 A: o/ A$ w" Z1 W* C% G8 n2 d* A
三维数组示例代码如下: + t# N3 \ J+ s7 w0 W* z7 {$ G . o e+ d! d3 Q 6 y+ R4 ^; E* c T4 Y. X" I4. 数组形状与类型变化& h$ x$ g1 _" P2 L2 Z. O# \! ]
1 s$ b! }$ A8 s/ s
1. ndarray.reshape(shape[, order]) Returns an array containing the same data with a new shape. 示例代码如下: 0 t( j( `8 k) f 8 o/ O0 ]% U8 r) c, h2. ndarray.resize(new_shape[, refcheck]) Change shape and size of array in-place. 示例代码如下: * D! m& W& `" Z $ r/ Z" Z! e8 O. |3. 修改类型 ndarray.astype(type) 示例代码如下: 2 t. f6 X e* X8 f, O1 o- ? ~% |6 a. b% Y# F+ |. T9 e
4. 修改小数位数 ndarray.round(arr, out) Return a with each element rounded to the given number of decimals. 示例代码如下: & j. X4 C* H$ C" M% x2 @- L3 w% g: L
5. ndarray.flatten([order]) Return a copy of the array collapsed into one dimension. 示例代码如下: 0 a% v; }) R7 S1 t4 m6 p! X Q" h* ^
6. ndarray.T 数组的转置 将数组的行、列进行互换 示例代码如下:: ~# r. N8 N r6 l( N$ w, t
5 r" A& ]8 V b5 g: Y# k! h, H6 t
7. ndarray.tostring([order])或者ndarray.tobytes([order]) Construct Python bytes containing the raw data bytes in the array. 转换成bytes3 V8 x$ J h y$ `
$ [ F8 t* k; ?) t) B) l8 A
8. ndarray.copy([order]) Return a copy of the array. 当我们不想修改某个数据的时候,就可以去进行拷贝操作。在拷贝的数据上进行操作,示例代码如下: ! @, S, W' Q* O( G& Q7 l 7 ]5 x( e% D2 ?" t& N5 O; a : G7 t9 i( B5 {4 E# H4. 数组运算 5 L/ M! g I1 M6 N g$ ~" a6 ?1 m* C6 E4 R) J
4.1 逻辑运算 6 b" y, y1 d6 p' E' D' U3 {! e2 N6 p0 C) P) g& d2 x/ @6 l
& t/ h. S, Q) O- E( |/ Z6 N- `7 T, \. D通用判断函数,np.all(),示例代码如下: + z. Z2 _. P9 X $ b: X$ j# O2 b0 _: @! Tnp.unique():返回新的数组的数值,不存在重复的值,示例代码如下: 6 ]: M F7 N0 o" Q: n7 g1 o- w* N1 f- i0 o& C" l+ u
np.where (三元运算符):通过使用np.where能够进行更加复杂的运算,示例代码如下: & Q3 ?1 p. C5 I 3 S& ~+ {" P! y 8 N$ v s. P: Q8 [- K4.2 统计运算% F# O0 b* _! `) ]4 W
# f) [, t+ H/ {2 B! k8 u( ?4 o: V在数据挖掘/机器学习领域,统计指标的值也是我们分析问题的一种方式。注意:进行统计的时候,axis轴 的取值并不一定, NumPy中不同的API轴的值都不一样,在这里,axis 0代表列, axis 1代表行 去进行统计。常用的指标如下: % h6 p" F5 @4 k0 z, ]) v+ k( }/ `* W6 u( h, x3 j8 I
min(a[, axis, out, keepdims]) Return the minimum of an array or minimum along an axis. 示例代码如下: 0 n) b$ d5 J. m: a9 @) f- D; b. F& w1 Q1 _
max(a[, axis, out, keepdims]) Return the maximum of an array or maximum along an axis. 示例代码如下: 6 w: B, v2 \; y7 j $ `: n; \. ~1 u1 A0 A Amedian(a[, axis, out, overwrite_input, keepdims]) Compute the median along the specified axis. 示例代码如下: 5 K' ?$ J/ C `" g* s6 N9 B# _1 i z* D. b
mean(a[, axis, dtype, out, keepdims]) Compute the arithmetic mean along the specified axis. 示例代码如下:& V2 H, a$ O5 H# D2 ?
4 L- o( J' H: A5 ~3 D2 c' q* Pstd(a[, axis, dtype, out, ddof, keepdims]) Compute the standard deviation along the specified axis. 示例代码如下: - |# O1 g. L& x6 U/ D# e" c, j# E. V
var(a[, axis, dtype, out, ddof, keepdims]) Compute the variance along the specified axis. 示例代码如下:' h/ o$ e" X, ?5 G$ ^6 h2 s
- @; F$ g' W8 H& ^% n3 q
np.argmax(temp, axis=) 示例代码如下: ^3 z' L, A6 g4 Z6 C$ H
/ K3 S7 C0 `+ Z: S
np.argmin(temp, axis=) 示例代码如下: , ^2 Y$ s8 q2 z& j % y9 ]4 A' v9 Y* Z% \8 | D0 J& ~, |4.3 数组间运算" b1 A* S+ ~! }6 I' F4 O5 u
$ m. e" Y, k8 }* P数组与数的运算,示例代码如下: * z/ ~' O T6 Z: L' B5 u8 ?1 k% g) V; p* P
矩阵运算,什么是矩阵?矩阵,英文matrix,和array的区别矩阵必须是2维的,但是array可以是多维的。示例代码如下:" c) L* T2 d; _) [
! Z$ b/ W! ?+ Y1 B% d