目录##

掌握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(一)的更多相关文章

  1. 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片

    概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...

  2. 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍

    一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...

  3. 利用Python进行数据分析(6) NumPy基础: 矢量计算

    矢量化指的是用数组表达式代替循环来操作数组里的每个元素. NumPy提供的通用函数(既ufunc函数)是一种对ndarray中的数据进行元素级别运算的函数. 例如,square函数计算各元素的平方,r ...

  4. python安装numpy、scipy和matplotlib等whl包的方法

    最近装了python和PyCharm开发环境,但是在安装numpy和matplotlib等包时出现了问题,现总结一下在windows平台下的安装方法. 由于现在找不到了工具包新版本的exe文件,所以采 ...

  5. 深入理解numpy

    一.为啥需要numpy python虽然说注重优雅简洁,但它终究是需要考虑效率的.别说运行速度不是瓶颈,在科学计算中运行速度就是瓶颈. python的列表,跟java一样,其实只是一维列表.一维列表相 ...

  6. Python Numpy,Pandas基础笔记

    Numpy Numpy是python的一个库.支持维度数组与矩阵计算并提供大量的数学函数库. arr = np.array([[1.2,1.3,1.4],[1.5,1.6,1.7]])#创建ndarr ...

  7. broadcasting Theano vs. Numpy

    broadcasting Theano vs. Numpy broadcast mechanism allows a scalar may be added to a matrix, a vector ...

  8. python之numpy

    一.矩阵的拼接合并 列拼接:np.column_stack() >>> import numpy as np >>> a = np.arange(9).reshap ...

  9. win7系统下python安装numpy,matplotlib,scipy和scikit-learn

    1.安装numpy,matplotlib,scipy和scikit-learn win7系统下直接采用pip或者下载源文件进行安装numpy,matplotlib,scipy时会遇到各种问题,这是因为 ...

  10. 给numpy矩阵添加一列

    问题的定义: 首先我们有一个数据是一个mn的numpy矩阵现在我们希望能够进行给他加上一列变成一个m(n+1)的矩阵 import numpy as np a = np.array([[1,2,3], ...

随机推荐

  1. git忽略文件并删除git仓库中的文件

    问题描述 不慎在创建.gitignore  文件之前的时候将文件push到了 git仓库,即使之后在.gitignore文件中写入新的过滤规则,这些规则也不会起作用的,git依然会对所有git仓库中的 ...

  2. C#生成Code128码

    using System; using System.Collections.Generic; using System.Data; using System.Drawing; namespace C ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(87)-MVC Excel导入和导出

    本文示例代码下载: 链接:http://pan.baidu.com/s/1jHBdgCA 密码:hzh7 ps:Vs数据库脚本在解压目录下,修改web.config数据库链接,示例代码包含:导入,导出 ...

  4. 即时通信系统Openfire分析之八:集群管理

    前言 在第六章<路由表>中,客户端进行会话时,首先要获取对方的Session实例.获取Session实例的方法,是先查找本地路由表,若找不到,则通过路由表中的缓存数据,由定位器获取. 路由 ...

  5. win10 uwp 入门

    UWP是什么我在这里就不说,本文主要是介绍如何入门UWP,也是合并我写的博客. 关于UWP介绍可以参见:http://lib.csdn.net/article/csharp/32451 首先需要申请一 ...

  6. wordpress 显示数学公式 (MathJax-LaTeX)

    blog 不放一堆数学公式怎么能显得高大上,所以 MathJax-LaTeX 也是必装的插件之一了. 一.安装 MathJax-LaTex 插件 直接在 wordpress 插件中,搜索并安装 Mat ...

  7. php7+apache2.4配置

    因为需要搭建一套discuz的程序,所以就扯到了php. 对于php完全没接触过,然后就百度了下php的容器,看到apache可以.机子上刚好有装,就干脆用它了. 测试环境:win10x64+php7 ...

  8. 关于python如果没有numpy模块如何处理

    1.在python中,你在python的shell输入>>>import numpy 但是编译器告诉你没有numpy库,这时候你就要导入python库,那么如何导入呢 2.收下访问h ...

  9. phalcon——调度控制器

    将侦听者绑定到组件上: use Phalcon\Mvc\Dispatcher as MvcDispatcher, Phalcon\Events\Manager as EventsManager; $d ...

  10. 【前端】主流API-promise解析,js基础。

    前言 在js领域,promise出现的时间已经很久了,从jquery的$.get().done().fail() 这样的API开始,到现在的es6默认支持的new Promise(),它的出现无疑使异 ...