利用python进行数据分析-03-numpy基础

1、通用函数:快速的元素级数组函数

ufunc是一种对ndarray中的数据执行元素级运算的函数。

image

image

2、利用数组进行数据处理

矢量化:用数组表达式代替循环

eg:在一组值(网格型)上计算函数sqrt(x^2+y^2),np.meshgrid函数接受两个一维数组,并产生两个二维矩阵(对应于两个数组中所有的(x,y)对):

points = np.arange(-5,5,0.01)
xs,ys = np.meshgrid(points,points)
xs

Out[76]: 
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
Out[77]: 
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]])

平方和开根:

z = np.sqrt(xs ** 2 + ys **2 )

z
Out[79]: 
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]])

将条件逻辑转换为数组逻辑:

根据cond的值进行选取xarr和yarr的值,当con的值为true时选取xarr。否则选取yarr

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 = np.where(cond,xarr,yarr)

result
Out[84]: array([ 1.1,  2.2,  1.3,  1.4,  2.5])

3、数学统计方法

arr = np.random.randn(5,4)

arr.mean()
Out[86]: 0.049325965007176856

np.mean(arr)

Out[87]: 0.049325965007176856

arr.sum()

Out[88]: 0.98651930014353717

mean和sum这类函数可以接受一个axis函数, 用于计算向上的统计值,最终结果是一个少一个少一维的的数组。

arr.mean(axis =1 )
Out[89]: array([ 0.24557933, -0.4104083 ,  0.25393696,  0.37643717, -0.21891534])

arr.sum(0)
Out[90]: array([-2.07128646,  0.46531611,  0.99349228,  1.59899738])
arr = np.array([[0,1,2],[3,4,5],[6,7,8]])

arr.cumsum(0) #按行进行累加计算
Out[93]: 
array([[ 0,  1,  2],
       [ 3,  5,  7],
       [ 9, 12, 15]], dtype=int32)

arr.cumprod(1)  #按列(二维)进行累积计算
Out[94]: 
array([[  0,   0,   0],
       [  3,  12,  60],
       [  6,  42, 336]], dtype=int32)

image

image

4、用于布尔型数组的方法

arr = np.random.randn(100)

(arr>0).sum()
Out[98]: 55

bools = np.array([False,False,True,True,False])

bools.any() #  Any用于测试数组中是否存在一个或多个True
Out[100]: True

bools.all() # All用于检查数组中所有值是否都是tree
Out[101]: False

5、唯一化以及其他的集合逻辑

ndarray的基本集合运算,最常用的应该是np.unique了,他用于找出数组中的唯一值并返回已排序的结果。

import numpy as np

names = np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe'])

np.unique(names)
Out[4]: 
array(['Bob', 'Joe', 'Will'], 
      dtype='<U4')

sorted(set(names))
Out[5]: ['Bob', 'Joe', 'Will']

np.in1d用于测试一个数组中的值在另一个数组中的成员资格,返回一个布尔型数组。

values = np.array([6,0,0,3,2,5,6])

np.in1d(values,[2,3,6])
Out[7]: array([ True, False, False,  True,  True, False,  True], dtype=bool)

image

6、用于数组文件的输入与输出

将数组以二进制格式保存到磁盘:

np.save和np.load是读写磁盘数组数据的两个主要函数,默认数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中。

arr = np.arange(10)

np.save('some_array',arr)

np.load('some_array.npy')
Out[11]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

np.savez可以将多个数组保存到 一个压缩卷,将数组以关键字参数的,

np.savez('array_archive.npz',a=arr,b=arr)

arch = np.load('array_archive.npz')

arch['b']
Out[12]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

存取文本文件

posted @ 2015-10-23 09:51  Groupe  阅读(277)  评论(0编辑  收藏  举报