python numpy包的使用二数据处理与文件读写

一、数据处理


1.meshgrid函数

如果我们想在一组sqrt(x^2+y^2),便可以使用meshgrid函数。它接收两个以为数组,产生两个二维矩阵,如下:

>>> points = np.arange(-5,5,0.01)
>>> xs,ys = np.meshgrid(points,points)#代表要计算的x,y值
>>> xs
array([[-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       ...,
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99]])
>>> ys
array([[-5.  , -5.  , -5.  , ..., -5.  , -5.  , -5.  ],
       [-4.99, -4.99, -4.99, ..., -4.99, -4.99, -4.99],
       [-4.98, -4.98, -4.98, ..., -4.98, -4.98, -4.98],
       ...,
       [ 4.97,  4.97,  4.97, ...,  4.97,  4.97,  4.97],
       [ 4.98,  4.98,  4.98, ...,  4.98,  4.98,  4.98],
       [ 4.99,  4.99,  4.99, ...,  4.99,  4.99,  4.99]])
接下来像计算两个实数一样计算它们的值就可以了,如下:

>>> np.sqrt(xs**2+ys**2)
array([[ 7.07106781,  7.06400028,  7.05693985, ...,  7.04988652,
         7.05693985,  7.06400028],
       [ 7.06400028,  7.05692568,  7.04985815, ...,  7.04279774,
         7.04985815,  7.05692568],
       [ 7.05693985,  7.04985815,  7.04278354, ...,  7.03571603,
         7.04278354,  7.04985815],
       ...,
       [ 7.04988652,  7.04279774,  7.03571603, ...,  7.0286414 ,
         7.03571603,  7.04279774],
       [ 7.05693985,  7.04985815,  7.04278354, ...,  7.03571603,
         7.04278354,  7.04985815],
       [ 7.06400028,  7.05692568,  7.04985815, ...,  7.04279774,
         7.04985815,  7.05692568]])

2.条件逻辑表达式

使用where函数或者x if condition else y可以根据条件选取值,其中where函数x if condition else y的矢量版本。

 x if condition else y的用法:

>>> xarr = np.array([1.1,1.2,1.3,1.4,1.5])
>>> yarr = np.array([2.1,2.2,2.3,2.4,2.5])
>>> cond = np.array([True,False,True,True,False])
>>> result = [(x if c else y)]
>>> result = [(x if c else y) for x,y,c in zip(xarr,yarr,cond)]
>>> result
[1.1000000000000001, 2.2000000000000002, 1.3, 1.3999999999999999, 2.5]
where的用法:

>>> result = np.where(cond,xarr,yarr)
>>> result
array([ 1.1,  2.2,  1.3,  1.4,  2.5])
第二和第三个参数不必是数组,它们都可以是标量,也可以省略,比如:

>>> a=np.arange(15).reshape(3,5)
>>> np.where(a>5,1,-1)#大于5的数全部置为1,小于5的数置为-1
array([[-1, -1, -1, -1, -1],
       [-1,  1,  1,  1,  1],
       [ 1,  1,  1,  1,  1]])

3.数学和统计方法

    可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算。包括sum、mean以及标准差std等函数。

>>> arr = np.random.randn(5,4)
>>> arr
array([[-0.93836962,  0.38506353, -0.61461464, -1.75187982],
       [-1.07569661,  1.34323116, -1.59359379,  0.05896282],
       [ 0.7042585 , -1.09405091,  1.95287523,  1.82780583],
       [-0.45911949,  1.21783708, -0.5824492 , -3.97907432],
       [-0.48058905,  3.31623368, -1.55382586, -0.85738129]])
>>> arr.mean()#求平均值
-0.20871883850830381
>>> arr.sum()#求和
-4.1743767701660763
>>> np.sum(arr)#另一种写法
-4.1743767701660763
>>> arr.mean(axis=1)#计算轴向上的统计值
array([-0.72995014, -0.31677411,  0.84772216, -0.95070148,  0.10610937])
>>> arr.sum(axis=1)
array([-2.91980055, -1.26709643,  3.39088865, -3.80280594,  0.42443749])
>>> arr = np.random.randn(100)
>>> (arr>0).sum() #判断正值的数量
45

基本数组统计方法:

python numpy包的使用二数据处理与文件读写_第1张图片


4.唯一化及其他

使用unique函数可以找出数组中的唯一值并返回排序后的结果,如下:

>>> arr = np.array(['Bob','Curry','LBJ','james','Bob','Durant','love','james'])
>>> np.unique(arr)
array(['Bob', 'Curry', 'Durant', 'LBJ', 'james', 'love'],
      dtype='|S6')
不过使用纯Python实现也不复杂:

>>> sorted(set(arr))
['Bob', 'Curry', 'Durant', 'LBJ', 'james', 'love']
使用In1d(中间的确实是1不是l,这个函数的命名挺奇怪)函数可以判断一个数组中的元素是否在另一个数组中:

>>> values = np.array([6,0,0,3,2,5,6])
>>> np.in1d(values,[2,3,6]) #
array([ True, False, False,  True,  True, False,  True], dtype=bool)
其他的一些数组集合运算的函数:

python numpy包的使用二数据处理与文件读写_第2张图片


二、文件读写


1.以二进制形式存储

save和load函数是文件存取的主要函数,默认情况下是以二进制的形式存储在拓展名为.npy的文件中:

>>> arr = np.arange(10)
>>> np.save('array',arr)
>>> np.load('array.npy')#如果没有拓展名,自动加上.npy
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
默认存储路径为C:\Users\Administrator,由于是以二进制形式存储,所以直接打开只会看到一些数字。
使用savez函数可以一次存取多个数组:

>>> arr1
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> arr2
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.savez('array1',a=arr1,b=arr2)
>>> res = np.load('array1.npz')#npz为后缀名
>>> res['a']
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> res['b']
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
获取存储多个数组的文件时会采用延时加载,即当调用时才去加载。

2.以文本文件形式存取

使用savetxt和loadtxt可以将文件存取为文本文件:

>>> np.savetxt('array.txt',arr1)
>>> np.loadtxt('array.txt')
array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])

三、线性代数


矩阵相乘:

>>> x
array([[2, 3, 4],
       [5, 6, 7]])
>>> y
array([[1, 2],
       [2, 3],
       [3, 4]])
>>> x.dot(y)
array([[20, 29],
       [38, 56]])
>>> np.dot(x,y) #两种调用方法
array([[20, 29],
       [38, 56]])

常用线性代数函数

python numpy包的使用二数据处理与文件读写_第3张图片

参考:

《利用python进行数分析》


你可能感兴趣的:(python,python,python,numpy)