掌握numpy(一)
目录##
掌握numpy(一)
掌握numpy(二)
掌握numpy(三)
掌握numpy(四)
NumPy
是一款用于科学计算的python包,强大之处在于矩阵的运算以及包含丰富的线性代数运算的支持。本文将对numpy一些常用的用法进行讲解,一来是对自己的知识进行梳理,二来作为一份备忘录
供以后查阅,如果有幸被你读到,通过阅读本文希望对你有帮助。由于本人能力有限,如果有错误请指出~
创建数组##
首先我们要先引入numpy,常用的引入方法为
import numpy as np
np.zeros###
该方法能够创建一个全为0的数组
>>np.zeros(5)
array([ 0., 0., 0., 0., 0.])
上面是创建一个1维的数组,创建一个多维的数组也很简单,eg下面是创建一个二维的数组
>>a = np.zeros((3,4))
>>a
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
在上面的例子里面,每一个维度被成为轴(axis)
当定义了一个array的时候,我们可以查看其形状
>>a.shape
(3L, 4L)
还有查看该数组种元素的个数
>>a.size
12
在numpy种,数组类型有着其封装好的数据类型ndarray
:
>>type(a)
numpy.ndarray
N维度数组###
当然,我们还可以定义更高维度的数组,eg:下面我们定义一个3D 数组
>>np.zeros((2,3,4))
array([[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]],
[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]]])
np.ones###
与前面讲的zeros
类似,这是创建一个全为1的数组
>>np.ones((3,4))
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]])
np.full###
创建一个数组,并由给定的数值进行初始化
>>np.full((3,4),np.pi)
array([[ 3.14159265, 3.14159265, 3.14159265, 3.14159265],
[ 3.14159265, 3.14159265, 3.14159265, 3.14159265],
[ 3.14159265, 3.14159265, 3.14159265, 3.14159265]])
np.empty###
这个又是什么意思呢?创建一个未初始化的数组,里面的值全部随机
>>np.empty((2,2))
array([[ 2.96206109e-316, 2.42711804e-316],
[ 1.85335328e-316, 1.85335328e-316]])
np.array###
如何将python原生的list对象转化为numpy的array呢
>>np.array([1,2,3,4])
array([1, 2, 3, 4])
np.arange###
numpy还提供了类似python的range方法
>>np.arange(1,5)
array([1, 2, 3, 4])
当然我们还可以设置迭代的步长
>>np.arange(1,5,0.5)
array([ 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])
np.linspace###
该方法的作用是将一组值,以相同的间隔,迭代给定的次数
>>np.linspace(1,10,4)
array([ 1., 4., 7., 10.])
np.rand 和np.randn###
numpy提供了一系列的随机方法来随机初始化数组,下面是使用uniform distribution
来随机初始化数组(取值范围[0,1])
>>np.random.rand(3,4)
array([[ 0.1017882 , 0.96519783, 0.899528 , 0.62844884],
[ 0.63758273, 0.71036901, 0.76895382, 0.41230372],
[ 0.31258595, 0.90595397, 0.44213312, 0.33604536]])
还可以使用normal distribution
方法来初始化数组,均值为0、方差为1
>>np.random.randn(3,4)
array([[ 0.05971094, 1.57336808, -0.56372917, 1.58623654],
[-0.82797012, 0.19435163, 1.64495295, 0.07486049],
[-0.97815692, 1.4891987 , 0.65185811, -0.53984805]])
为了更加直观的表示上面的函数,将使用matplotlib将其绘制出来
import matplotlib.pyplot as plt
plt.hist(np.random.rand(100000), normed=True, bins=100, histtype="step", color="blue", label="rand")
plt.hist(np.random.randn(100000), normed=True, bins=100, histtype="step", color="red", label="randn")
plt.axis([-2.5, 2.5, 0, 1.1])
plt.legend(loc = "upper left")
plt.title("Random distributions")
plt.xlabel("Value")
plt.ylabel("Density")
plt.show()
np.fromfunction###
有些时候,单一的数组初始化方式不能满足我们的业务需求,这个时候我们就需要定制初始化规则,强大的numpy当然也会考虑到这一问题
def my_function(x,y,z):
return x * y + z
a = np.fromfunction(my_function, (2,3,4))
>>a
array([[[ 0., 1., 2., 3.],
[ 0., 1., 2., 3.],
[ 0., 1., 2., 3.]],
[[ 0., 1., 2., 3.],
[ 1., 2., 3., 4.],
[ 2., 3., 4., 5.]]])
上面得到的数组是怎么一个计算过程呢?首先numpy将数组种的坐标点带入自定义的函数种,例如右下角的5
坐标点为(1,2,3)
将其坐标代入自定义函数
数组中的数值##
dtype###
上一节将了使用numpy创建数组类型为ndarray
,那么数组中的数据也有着自己的数据类型.
>>c = np.arange(1, 5)
c.dtype #int32
data buffer###
数组以一维度byte buffer存放在内存中,可以通过data
属性来进行查看
先定义一个数组
>>f = np.array([[1,2],[1000, 2000]], dtype=np.int32)
f.data
<read-write buffer for 0x000000000BB03F30, size 16, offset 0 at 0x000000000C4DCEA0>
python2和3的查看方式不一样
if (hasattr(f.data, "tobytes")):
data_bytes = f.data.tobytes() # python 3
else:
data_bytes = memoryview(f.data).tobytes() # python 2
>>data_bytes
'\x01\x00\x00\x00\x02\x00\x00\x00\xe8\x03\x00\x00\xd0\x07\x00\x00'
掌握numpy(一)的更多相关文章
- 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片
概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...
- 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍
一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...
- 利用Python进行数据分析(6) NumPy基础: 矢量计算
矢量化指的是用数组表达式代替循环来操作数组里的每个元素. NumPy提供的通用函数(既ufunc函数)是一种对ndarray中的数据进行元素级别运算的函数. 例如,square函数计算各元素的平方,r ...
- python安装numpy、scipy和matplotlib等whl包的方法
最近装了python和PyCharm开发环境,但是在安装numpy和matplotlib等包时出现了问题,现总结一下在windows平台下的安装方法. 由于现在找不到了工具包新版本的exe文件,所以采 ...
- 深入理解numpy
一.为啥需要numpy python虽然说注重优雅简洁,但它终究是需要考虑效率的.别说运行速度不是瓶颈,在科学计算中运行速度就是瓶颈. python的列表,跟java一样,其实只是一维列表.一维列表相 ...
- Python Numpy,Pandas基础笔记
Numpy Numpy是python的一个库.支持维度数组与矩阵计算并提供大量的数学函数库. arr = np.array([[1.2,1.3,1.4],[1.5,1.6,1.7]])#创建ndarr ...
- broadcasting Theano vs. Numpy
broadcasting Theano vs. Numpy broadcast mechanism allows a scalar may be added to a matrix, a vector ...
- python之numpy
一.矩阵的拼接合并 列拼接:np.column_stack() >>> import numpy as np >>> a = np.arange(9).reshap ...
- win7系统下python安装numpy,matplotlib,scipy和scikit-learn
1.安装numpy,matplotlib,scipy和scikit-learn win7系统下直接采用pip或者下载源文件进行安装numpy,matplotlib,scipy时会遇到各种问题,这是因为 ...
- 给numpy矩阵添加一列
问题的定义: 首先我们有一个数据是一个mn的numpy矩阵现在我们希望能够进行给他加上一列变成一个m(n+1)的矩阵 import numpy as np a = np.array([[1,2,3], ...
随机推荐
- C# XML序列化
/// <summary> /// XML序列化为指定对象 /// Author:taiyonghai /// Time:2016-08-22 /// </summary> / ...
- canvas图表详解系列(1):柱状图
本章建议学习时间4小时 学习方式:详细阅读,并手动实现相关代码(如果没有canvas基础,需要先学习前面的canvas基础笔记) 学习目标:此教程将教会大家如何使用canvas绘制各种图表,详细分解步 ...
- JS判断浏览器类型与版本
在JS中判断浏览器的类型,估计是每个编辑过页面的开发人员都遇到过的问题.在众多的浏览器产品中,IE.Firefox.Opera.Safari........众多品牌却标准不一,因此时常需要根据不同的浏 ...
- 关于WPF的验证
1.ValidationRule 验证 ValidationRule:是通过ValidationRule中的的Validate方法来验证我们绑定的属性.所以我们的用法是继承ValidationRule ...
- doubi -- 初创
doubi -- 初创 [背景分析] 一直在苦苦探寻人生的价值和意义.在这"二八"年华,对IT工作有点厌倦了.每天都是无休止地问题定位,需求会议.碎片化的时间写出来的代码都是无比的 ...
- 使用olami sdk实现一个语音查询股票的iOS程序
前言 在目前的软件应用中,输入方式还是以文字输入方式为主,但是语音输入的方式目前应用的越来越广泛.在这里介绍一个使用 Olami SDK 编写的一个使用语音输入查询股票的APP Olami SDK的介 ...
- 利用大白菜制作多系统启动U盘(win+ubuntu+PE+...)
网上提供的方法很多都过时了,不适用,要不就是讲的不清楚 我结合http://www.xuebuyuan.com/848003.html大神的方案,加以研究,整理出了此篇文章 先看下最终成果: 好了,感 ...
- Noip2016愤怒的小鸟(状压DP)
题目描述 题意大概就是坐标系上第一象限上有N只猪,每次可以构造一条经过原点且开口向下的抛物线,抛物线可能会经过某一或某些猪,求使所有猪被至少经过一次的抛物线最少数量. 原题中还有一个特殊指令M,对于正 ...
- IO 调优
磁盘优化 1.增加缓存 2.优化磁盘的管理系统 3.设计合理的磁盘存储数据块 4.应用合理的RAID策略 TCP网络参数调优 网络IO优化 1.减少网络交互次数 2.减少网络传输数据量的大小 3.尽量 ...
- struts2国际化相关问题
国际化资源文件的方式: Action范围的 包范围的 临时的 全局的(推荐) 一.配置全局的国际化资源文件 1.在类路径下,创建国际化资源文件 baseName.properties baseName ...