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

基本数组统计方法:


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)
其他的一些数组集合运算的函数:


二、文件读写


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进行数分析》


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值