Python数据分析之Numpy学习 2 —— NumPy 基础学习
NumPy(Numerical Python)是高性能科学计算和数据分析的基础包。NumPy的主要对象是同构数据多维容器(homogeneous multidimensional array)——ndarray,也就是说每一个ndarray都是一个相同类型元素组成的表格(二维)。在NumPy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。轴这个概念必须牢记,否则放弃吧。首先轴是从0开始计的,0代表最高维,次高维是1,以此类推。
约定:
import numpy as np
ndarray对象的常用属性
创建ndarray
函数说明
np.array(data,dtype=None, order=None)
将数据data(列表、元组、数组或其他序列类型)转换为ndarray。要么推断出dtype,要么显示指定dtype。默认直接复制数据。order默认是A(可能是C可能是F还可能是其它)
np.asarray(data, dtype=None, order=None)
将输入数据转换为ndarray,data同上还可以是ndarray,如果是ndarray就不进行复制。dtype同上,order是重塑中行优先C还是列优先F,默认C语言风格。
np.arange(10,30,5,dtype=None)
开始,结束,步长和内置的range相同
np.ones( (2,3,4), dtype=None) 、np.ones_like(a)
根据指定的形状和dtype创建一个全1的数组。ones_like以另一个数组为参数,创建形状和dtype相同的全1数组。
np.zeros() 、np.zeros_like()
全0数组,类似ones和ones_like。
np.empty() 、np.empty_like()
创建数组,只分配内存空间但不填充任何值,所以返回的是垃圾值。类似ones和ones_like。
np.eye(N, M=None, k=0, dtype=) 、np.identity(n, dtype=None)
eye创建的是N*M的数组,默认M=N,k取整数,正数对角线向上移k,负数对角线向下移k。identity创建一个N*N单位矩阵(对角线为1,其余全0)的数组
示例 array
numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
import numpy as npa = np.array([1,2,3]) print a
输出如下:
[1, 2, 3]
# 多于一个维度 import numpy as npa = np.array([[1, 2], [3, 4]]) print a
输出如下:
[[1, 2][3, 4]]
# dtype 参数 import numpy as npa = np.array([1, 2, 3], dtype = complex) print a
输出如下:
[ 1.+0.j, 2.+0.j, 3.+0.j]
索引,切片和迭代
一维数组可以被索引、切片和迭代,就像列表和其它Python序列。
>>> a = arange(10)**3>>> aarray([ 0, 1, 8, 27, 64, 125, 216, 343, 512, 729])>>> a[2]8>>> a[2:5]array([ 8, 27, 64])>>> a[:6:2] = -1000 # equivalent to a[0:6:2] = -1000; from start to position 6, exclusive, set every 2nd element to -1000>>> aarray([-1000, 1, -1000, 27, -1000, 125, 216, 343, 512, 729])>>> a[ : :-1] # reversed aarray([ 729, 512, 343, 216, 125, -1000, 27, -1000, 1, -1000])>>> for i in a:... print i**(1/3.),...nan 1.0 nan 3.0 nan 5.0 6.0 7.0 8.0 9.0
多维数组可以每个轴有一个索引。这些索引由一个逗号分隔的元组给出。
>>> def f(x,y):... return 10*x+y...>>> b = fromfunction(f,(5,4),dtype=int)>>> barray([[ 0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33], [40, 41, 42, 43]])>>> b[2,3]23>>> b[0:5, 1] # each row in the second column of barray([ 1, 11, 21, 31, 41])>>> b[ : ,1] # equivalent to the previous examplearray([ 1, 11, 21, 31, 41])>>> b[1:3, : ] # each column in the second and third row of barray([[10, 11, 12, 13], [20, 21, 22, 23]])
组合(stack)不同的数组
几种方法可以沿不同轴将数组堆叠在一起:
>>> a = floor(10*random.random((2,2)))>>> aarray([[ 1., 1.], [ 5., 8.]])>>> b = floor(10*random.random((2,2)))>>> barray([[ 3., 3.], [ 6., 0.]])>>> vstack((a,b))array([[ 1., 1.], [ 5., 8.], [ 3., 3.], [ 6., 0.]])>>> hstack((a,b))array([[ 1., 1., 3., 3.], [ 5., 8., 6., 0.]])
函数
column_stack
以列将一维数组合成二维数组,它等同与
vstack
对一维数组。
>>> column_stack((a,b)) # With 2D arraysarray([[ 1., 1., 3., 3.], [ 5., 8., 6., 0.]])>>> a=array([4.,2.])>>> b=array([2.,8.])>>> a[:,newaxis] # This allows to have a 2D columns vectorarray([[ 4.], [ 2.]])>>> column_stack((a[:,newaxis],b[:,newaxis]))array([[ 4., 2.], [ 2., 8.]])>>> vstack((a[:,newaxis],b[:,newaxis])) # The behavior of vstack is differentarray([[ 4.], [ 2.], [ 2.], [ 8.]])
row_stack
函数,另一方面,将一维数组以行组合成二维数组。
对那些维度比二维更高的数组,
hstack
沿着第二个轴组合,
vstack
沿着第一个轴组合,
concatenate
允许可选参数给出组合时沿着的轴。
函数和方法(method)总览
这是个NumPy函数和方法分类排列目录。这些名字链接到NumPy示例,你可以看到这些函数起作用。[^5]
创建数组
arange, array, copy, empty, empty_like, eye, fromfile, fromfunction, identity, linspace, logspace, mgrid, ogrid, ones, ones_like, r , zeros, zeros_like
转化
astype, atleast 1d, atleast 2d, atleast 3d, mat
操作
array split, column stack, concatenate, diagonal, dsplit, dstack, hsplit, hstack, item, newaxis, ravel, repeat, reshape, resize, squeeze, swapaxes, take, transpose, vsplit, vstack
询问
all, any, nonzero, where
排序
argmax, argmin, argsort, max, min, ptp, searchsorted, sort
运算
choose, compress, cumprod, cumsum, inner, fill, imag, prod, put, putmask, real, sum
基本统计
cov, mean, std, var
基本线性代数
cross, dot, outer, svd, vdot