目录##

掌握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. web应用程序 前段部分调优

    1. 使用瀑布图初步诊断网站性能瓶颈 一般来说,打开一个网页的速度会受到以下几项的影响: 1) 服务器花了太长的时间将.aspx页面的内容转化为html. 2) .aspx页面花了太长的时间从服务器端 ...

  2. FPGA在其他领域的应用(二)

    计算机和存储领域: 计算机技术和存储技术发展迅猛.如今,云计算正在实现对传统 IT 功能和全新功能的整合.例如,许多大型数据中心目前正在同时提供传统的 IT 服务以及新型的数据分析服务. 因此,这些大 ...

  3. php使用curl下载指定大小的文件

    php中使用基于libcurl的curl函数,可以对目标url发起http请求并获取返回的响应内容.通常的请求方式类似如下的代码: public function callFunction($url, ...

  4. 数据库表反向生成(一) MyBatis-generator与IDEA的集成

    在Dao层,通过数据库表反向生成,可以节省我们很多的精力,把更多的精力投入复杂的业务中. 数据库表反向生成,指的是通过数据库如mysql中的库表schema生成dao层读写表的基础代码,包括model ...

  5. 3.ElasticSearch的倒排索引

    一. 正向索引 常规的索引建立方式 文档---> 关键词的映射过程(正向索引) 比如: 我有很多个文章,如果想查询其中几个文章是否含有刘耀这个关键词,那么我就需要打开所以文章,找到里面含义刘耀的 ...

  6. python 中的enumerate()函数的用法

    enumerate函数说明: 函数语法:enumerate(可遍历的对象,索引号开始的值).enumerate(sequence, [start=0]) 功能:将可循环序列sequence以start ...

  7. OpenSCAD 建模:矿泉水瓶花洒

    下载地址:https://github.com/ZhangGaoxing/openscad-models/tree/master/Sprinkle 代码: module screw(r=){ ::]) ...

  8. 支持“WeShopDb”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库

    用EF框架搭建完成后,为其中一张表加了一个字段,程序运行时候就一直报这个错误,郁闷了一个晚上,不过通过找资料,上网搜答案,找了好几个解决方案可以解决这个问题,我把他吗分享出来希望可以帮助到你们 方法一 ...

  9. (MariaDB)MySQL内置函数大全

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  10. LeetCode 530. Minimum Absolute Difference in BST (二叉搜索树中最小绝对差)

    Given a binary search tree with non-negative values, find the minimum absolute difference between va ...