$python数据分析基础——初识numpy库

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.853533021.88474198  1.99755291  2.12384833  2.3727505 ]

求和:

print np.sum(np_info[0:10,0])
18.5673265584

转载于:https://www.cnblogs.com/jiayongji/p/7354213.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/416164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

npm run build 报错 versionRequirement: packageConfig.engines.node 'node' of undefined

我在拿以前写的项目进行改造后&#xff0c;使用npm run build准备打包部署&#xff0c;然而确报了一个小错&#xff1a; versionRequirement: packageConfig.engines.node ... TypeError: Cannot read property node of undefined 根据提示&#xff0c;我们可以定位到是在pac…

变频器服务器电路板维修,变频器电路板维修技巧

变频器电路板维修技巧电路板使电路迷你化、直观化&#xff0c;对于固定电路的批量生产和优化用电器布局起重要作用。下面来跟西欧阿布了解下变频器电路板的维修技巧吧。前市场上国产变频器主要以低压通用型变频器为主&#xff0c;为下文叙述方便&#xff0c;现简要介绍通用型变…

struts基础配置

struts2是针对MVC思想的具体实现&#xff0c;对应于MVC中的C即Controller控制器层&#xff0c;有以下优点&#xff1a; 通过简单、集中的配置来调度业务类&#xff0c;是的配置和修改都很容易。提供简单、统一的表达式语言来访问所有可访问的数据。提供标准、强大的验证框架和国…

判断浏览器是否为手机端 is mobile

一个网站&#xff0c;我做了PC端和手机端&#xff0c;我的需求是用户默认打开网站是PC端&#xff0c;PC端在业务功能代码加载之前&#xff0c;立马判断是否为手机浏览器&#xff0c;若是手机浏览器则立马跳转到手机端页面。 其实&#xff0c;我们只需要一个npm包来解决这个问题…

qt银行排队系统服务器代码,QT银行叫号排队系统

【实例简介】这个项目是基于windows下开发的&#xff0c;与sqlite数据库的结合使用&#xff0c;实现模拟银行的叫号排队机【实例截图】【核心代码】xiangmu└── xiangmu├── banksystem│ ├── banksystem.pro│ ├── banksystem.pro.user│ ├── banksystem.p…

list基本运用

1 #include<iostream>2 #include<list>3 using namespace std;4 list<int>list1,list2;5 void Creat_List(){6 // 空链表 7 list<int> L0; 8 9 // 建一个含个默认值是的元素的链表 10 list<int> L1(9); 11 12 …

支付宝 PEM routines:PEM_read_bio:no start line

今天在做支付宝开发&#xff0c;将密钥赋给变量&#xff0c;然在在签名的时候就直接报错&#xff0c;PEM routines:PEM_read_bio:no start line。 Error: error:0906D06C:PEM routines:PEM_read_bio:no start lineat Sign.sign (internal/crypto/sig.js:85:26)at signWithPriv…

加密服务器显示到期,注册加密卡成功了,打开软件还是提示演示到期了,怎么解决?...

期间,费用 期间,费用亦称期间成本&#xff0c;与一定期间相联系&#xff0c;直接从企业当期销售收入中扣除的费用。从企业的损益确定来看&#xff0c;期间费用与产品销售成本、产品销售税金及附加一起从产品销售收入中扣除后作为企业当期的营业利润。当期的期间费用是全额从当期…

支付宝 错误代码 insufficient-isv-permissions 错误原因: ISV权限不足,建议在开发者中心检查签约是否已经生效

我刚申请完&#xff0c;就进行测试&#xff0c;发现报错insufficient-isv-permissions。 排查一下&#xff0c;发现我在测试的时候&#xff0c;直接使用了支付宝正式请求地址&#xff1a;https://openapi.alipay.com/gateway.do。 我们需要做的&#xff0c;是把正式地址换成测…

施乐700彩机服务器显示c4,施乐彩色数码复印机故障代码大全

施乐彩色数码复印机是办公单位常用的设备之一&#xff0c;但是使用时间较长难免会出现故障&#xff0c;最常见的就是复印机代码报错&#xff0c;以下就是闪租闪修小编整理复印机代码报错含义&#xff0c;希望能对广大用户有所帮助。003-205机器序列号不一致004-415寿命已尽004-…

pm2常用的命令

这里只列举了我常用的命令&#xff1a; 1、启动server.js应用程序 pm2 start app.js 2、 启动server.js并设置程序名称为hehe-api pm2 start server.js --name"hehe-api" 3、当文件变化时自动重启应用 pm2 start app.js --watch 4、查看pm2启动的所有的应用程…

linux 下 .sh 文件语法

转自&#xff1a;http://blog.sina.com.cn/s/blog_54f82cc201010hfz.html 介绍&#xff1a; 1 开头 程序必须以下面的行开始&#xff08;必须方在文件的第一行&#xff09;&#xff1a;#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/b…

x3250m6系列服务器,IBM服务器X3250 M6 E3-1230v6 8GB 4x3.5 C110 300W 无驱

品牌&#xff1a; 联想(Lenovo)商品名称&#xff1a;联想(Lenovo) IBM X3250 M6 1U机架式服务器主机 E3-1230V6 标配 8G内存 无硬盘商品编号&#xff1a;1004823156店铺&#xff1a;广州德致商城商品产地&#xff1a;中国大陆内存 &#xff1a;1x8GB UDIMMRAID &#xff1a;标配…

ssh WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

解决办法很简单&#xff1a; ssh-keygen -R <IP地址>