numpy库是python的一个著名的科学计算库,本文是一个quickstart。
引入:计算BMI
BMI = 体重(kg)/身高(m)^2
假如有如下几组体重和身高数据,让求每组数据的BMI值:
weight = [65.4,59.2,63.6,88.4,68.7]
height = [1.73,1.68,1.71,1.89,1.79]
print weight / height ** 2
执行上面代码,报错:TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int'
这是因为普通的除法是元素级的而非向量级的,并不能应用到一组数据上。
解决方案:使用numpy.ndarray数据结构(N维数组),运算是面向矩阵的:
import numpy as np
np_weight = np.array(weight)
np_height = np.array(height)
print type(np_weight)
print type(np_height)
<type 'numpy.ndarray'>
<type 'numpy.ndarray'>
print np_weight
print np_height
[ 65.4 59.2 63.6 88.4 68.7]
[ 1.73 1.68 1.71 1.89 1.79]
注:和python的列表不同的是,numpy.ndarray数据结构的元素之间是没有逗号分隔的。
np_bmi = np_weight / np_height ** 2
print type(np_bmi)
print np_bmi
<type 'numpy.ndarray'>
[ 21.85171573 20.97505669 21.75028214 24.7473475 21.44127836]
numpy数组:numpy.ndarray
numpy.ndarray是numpy最基本的数据结构,即N维数组,且数组中的元素需要是同一种类型,如果不是,则会自动转换成同一种类型,如:
print np.array([1.0,'hi',True])
['1.0' 'hi' 'True']
可以看到都被转成了字符串类型。
不同数据类型的不同行为
# 普通的python列表
py_list = [1,2,3]
# numpy数组
np_array = np.array(py_list)
print py_list + py_list # 这是列表的拼接
[1, 2, 3, 1, 2, 3]
print np_array + np_array # 这是每两个对应元素之间的运算
[2 4 6]
子集
print np_bmi[0]
21.8517157272
print np_bmi > 23
[False False False True False]
print np_bmi[np_bmi > 23]
[ 24.7473475]
二维numpy数组
二维numpy数组是以list作为元素的数组,比如:
np_2d = np.array([height,weight])
print type(np_2d)
<type 'numpy.ndarray'>
print np_2d
[[ 1.73 1.68 1.71 1.89 1.79]
[ 65.4 59.2 63.6 88.4 68.7 ]]
print np_2d.shape
(2, 5)
通过shape属性值可以看出,np_2d是一个2行5列的二维数组。
single type原则
print np.array([[1,2],[3,'4']])
[['1' '2']
['3' '4']]
二维numpy数组的子集
np_2d = np.array([height,weight])
print np_2d
[[ 1.73 1.68 1.71 1.89 1.79]
[ 65.4 59.2 63.6 88.4 68.7 ]]
print np_2d[0][2]
1.71
print np_2d[0,2]
1.71
还可以在两个轴向上分别切片:
print np_2d[:,1:3]
[[ 1.68 1.71]
[ 59.2 63.6 ]]
选取第1行:
print np_2d[1,:]
[ 65.4 59.2 63.6 88.4 68.7]
求对应的BMI值:
print np_2d[1,:] / np_2d[0,:] ** 2
[ 21.85171573 20.97505669 21.75028214 24.7473475 21.44127836]
应用
用numpy生成呈正太分布的随机测试数据,并求各项基本的统计数据。
比如生成10000条数据集,记录的是某个镇上所有居民的身高(m)、体重(kg)数据,所用到的函数:
np.random.normal(均值,标准差,取样数)
height = np.random.normal(1.75,0.20,10000)
weight = np.random.normal(60.32,15,10000)
下面将若干个(这里是2个)一维数组拼成一个二维数组(有点像zip()函数的作用):
np_info = np.column_stack((height,weight))
print np_info
[[ 1.88474198 76.24957048]
[ 1.85353302 64.62674488]
[ 1.74999035 67.5831439 ]
...,
[ 1.78187257 50.11001273]
[ 1.90415778 50.65985964]
[ 1.51573081 41.00493358]]
求np_info身高平均值:
print np.mean(np_info[:,0])
1.75460102053
求身高的中位数:
print np.median(np_info[:,0])
1.75385473036
求身高和体重的相关系数:
print np.corrcoef(np_info[:,0],np_info[:,1])
[[ 1.00000000e+00 -1.50825116e-04]
[ -1.50825116e-04 1.00000000e+00]]
求身高的标准差:
print np.std(np_info[:,0])
0.201152169706
排序(不会影响源数组):
print np.sort(np_info[0:10,0])
[ 1.46053123 1.59268772 1.74939538 1.74999035 1.78229515 1.85353302
1.88474198 1.99755291 2.12384833 2.3727505 ]
求和:
print np.sum(np_info[0:10,0])
18.5673265584
随机推荐
-
UE4 去除不正确的水面倒影以及不完整镜头轮廓
最近在做的项目遇到了一点点问题,出现了如下效果 视角对着湖面移动会出现一个显示不完整的轮廓(比较长的蓝色矩形),详细一点就是下图这样,以及近处物体的倒影(从光照的照射角度来看是不应该出现的) 一开始就 ...
-
iOS根据Url 获取图片尺寸
iOS根据Url 获取图片尺寸 // 根据图片url获取图片尺寸 +(CGSize)getImageSizeWithURL:(id)imageURL { NSURL* URL = nil; if([i ...
-
oracle 复杂语句
select nvl(sum1,'0')as sum1,nvl(sum2,'0') as sum2,da2 from( select count(*) as sum1,substr(APPLY_DAT ...
-
智能卡 APTU命令
一条命令APDU含有一个头标和一个本体.本体可有不同长度,或者在相关数据字段为空时,整个可以不存 在. 头标由四个数据元组成,它们是类CLA(ClAss)字节,命令INS(INStructic,n)字 ...
-
Unity3d之剥离alpha通道
unity中, 将图集的 alpha 通道剥离出来可减少包体大小和内存使用大小. 方法是将原来的一张 rgba 图分成一张 rgb 和一张 alpha 图,android上rgb和alpha图均采用e ...
-
MySQL密码忘了怎么办?MySQL重置root密码方法
本文主要介绍Windows和Linux系统下忘记密码重置root密码的方法,需要的朋友可以参考下. MySQL有时候忘记了root密码是一件伤感的事.这里提供Windows 和 Linux 下的密码重 ...
-
dedecms环境优化
路径:dedecms/dede/templates/index_body.htm <script type="text/javascript">function sho ...
-
H5 新特性之 fileReader 实现本地图片视频资源的预览
大家好 !! 又见面了, 今天我们来搞一搞 H5的新增API FileReader 真是一个超级超级方便的API呢!!!很多场景都可以使用.......... 我们先不赘述MDN文 ...
-
HBase工具:如何查看HBase的HFile
root@root:~/Desktop/sourceCodes/hbase-2.1.1/bin# ./hbase Usage: hbase [<options>] <command& ...
-
python各个包的用途
python中的多个包的用途 1.Numpy Numpy提供了两种基本的对象:ndarray和ufunc.ndarray是存储单一数据类型的多维数组,而ufunc是能够对数组进行处理的函数. N维数组 ...