NumPy(Numerical Python)

是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

umPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合 C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。

SciPy 是一个开源的 Python 算法库和数学工具包。

SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。

Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向应用程序嵌入式绘图提供了应用程序接口(API)。

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

创建一个 ndarray 只需调用 NumPy 的 array 函数即可:

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = )

示例1: 一维数组

import numpy as np

a = np.array([,,])
print a

输出:

/usr/bin/python2.7 /Users/jackey/Documents/python/tensorflow/numpydemo.py
[1 2 3]

Process finished with exit code 0

示例2:二维数组

import numpy as np

a = np.array([[,,],[,,]])
print a

输出:

/usr/bin/python2. /Users/jackey/Documents/python/tensorflow/numpydemo.py
[[ ]
[ ]] Process finished with exit code

示例3:二维数组

import numpy as np

a = np.array([,,],ndmin = )
print a

输出:

/usr/bin/python2. /Users/jackey/Documents/python/tensorflow/numpydemo.py
[[ ]] Process finished with exit code

示例4:二维数组

import numpy as np

a = np.array([1,2,3],ndmin = 2, dtype = complex)
print a

输出:

/usr/bin/python2.7 /Users/jackey/Documents/python/tensorflow/numpydemo.py
[[1.+0.j 2.+0.j 3.+0.j]] Process finished with exit code 0

NumPy 数据类型

numpy 支持的数据类型比 Python 内置的类型要多很多,基本上可以和 C 语言的数据类型对应上,其中部分类型对应为 Python 内置的类型。

下表列举了常用 NumPy 基本类型。

数据类型对象(dtype)

numpy.dtype(object, align, copy)
  • object - 要转换为的数据类型对象
  • align - 如果为true, 填充字段使其类似C的结构体
  • copy - 复制dtype对象, 如果为false,则是对内置数据类型对象的引用

示例:

# -*- coding: UTF- -*-

import numpy as np

#使用标量类型
dt = np.dtype(np.int32)
print(dt) # int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替
dt = np.dtype('i8')
print(dt)

输出:

/usr/bin/python2. /Users/jackey/Documents/python/tensorflow/numpydemo.py
int32
int64 Process finished with exit code

下面实例展示结构化数据类型的使用,类型字段和对应的实际类型将被创建

# -*- coding: UTF- -*-

import numpy as np

dt = np.dtype([('age',np.int8)])
print(dt) a = np.array([(,),(,),(,)], dtype=dt)
print(a) print(a['age'])

输出:

/usr/bin/python2. /Users/jackey/Documents/python/tensorflow/numpydemo.py
[('age', 'i1')]
[(,) (,) (,)]
[ ] Process finished with exit code

示例:

# -*- coding: utf- -*-

import numpy as np

student = np.dtype([('name','S20'), ('age','i1'), ('marks','f4')])
print(student) a = np.array([('abc',,),('xyz',,)], dtype=student)
print(a)

输出:

/usr/bin/python2. /Users/jackey/Documents/python/tensorflow/numpydemo.py
[('name', 'S20'), ('age', 'i1'), ('marks', '<f4')]
[('abc', , .) ('xyz', , .)] Process finished with exit code

Numpy数组

NumPy 数组的维数称为秩(rank),一维数组的秩为 1,二维数组的秩为 2,以此类推。

在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是 NumPy 中的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。

很多时候可以声明 axis。axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作。

NumPy 的数组中比较重要 ndarray 对象属性有:

ndarray.ndim用于返回数组的维数,等于秩

示例:

# -*- coding: utf- -*-

import numpy as np

a = np.arange()   #a现在只有1个纬度
print(a.ndim)

输出:

/usr/bin/python2. /Users/jackey/Documents/python/tensorflow/numpydemo.py

Process finished with exit code 

ndarray.shape

ndarray.shape 表示数组的维度,返回一个元组,这个元组的长度就是维度的数目,即 ndim 属性(秩)。比如,一个二维数组,其维度表示"行数"和"列数"。

ndarray.shape 也可以用于调整数组大小。

示例:

# -*- coding: utf- -*-

import numpy as np

a = np.array([[,,],[,,]])
print(a.shape) a.shape = (,)
print(a) a.shape = (,)
print(a)

输出:

/usr/bin/python2. /Users/jackey/Documents/python/tensorflow/numpydemo.py
(, )
[[]
[]
[]
[]
[]
[]]
[[ ]] Process finished with exit code

ndarray.itemsize

ndarray.itemsize 以字节的形式返回数组中每一个元素的大小。

例如,一个元素类型为 float64 的数组 itemsiz 属性值为 8(float64 占用 64 个 bits,每个字节长度为 8,所以 64/8,占用 8 个字节),又如,一个元素类型为 complex32 的数组 item 属性为 4(32/8)。

示例:

# -*- coding: utf- -*-

import numpy as np

x = np.array([,,,,],dtype=np.int8)
print(x)
print(x.itemsize) y = np.array([,,,,], dtype=np.float64)
print(y)
print(y.itemsize)

输出:

/usr/bin/python2. /Users/jackey/Documents/python/tensorflow/numpydemo.py
[ ] [. . . . .] Process finished with exit code

ndarray 数组除了可以使用底层 ndarray 构造器来创建外,也可以通过以下几种方式来创建。

numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组:

numpy.empty(shape, dtype = float, order = 'C')

示例:

# -*- coding: utf- -*-

import numpy as np

x = np.empty([,], dtype=int)
print(x)

输出:

/usr/bin/python2. /Users/jackey/Documents/python/tensorflow/numpydemo.py
[[ -]
[ ]
[ ]] Process finished with exit code

注意 − 数组元素为随机值,因为它们未初始化。

numpy.zeros

创建指定大小的数组,数组元素以 0 来填充:

numpy.zeros(shape, dtype = float, order = 'C')

示例:

# -*- coding: utf- -*-

import numpy as np

# 默认为浮点数
x = np.zeros()
print(x) # 设置类型为整数
y = np.zeros((,), dtype=np.int)
print(y) # 自定义类型
z = np.zeros((,), dtype=[('x', 'i4'), ('y','i4')])
print(z)

输出:

/usr/bin/python2. /Users/jackey/Documents/python/tensorflow/numpydemo.py
[. . . . .]
[ ]
[[(, ) (, )]
[(, ) (, )]] Process finished with exit code

numpy.ones

创建指定形状的数组,数组元素以 1 来填充:

numpy.ones(shape, dtype = None, order = 'C')

示例:

# -*- coding: utf- -*-

import numpy as np

# 默认为浮点数
x = np.ones()
print(x) # 自定义类型
x = np.ones([,],dtype=int)
print(x)

输出:

/usr/bin/python2. /Users/jackey/Documents/python/tensorflow/numpydemo.py
[. . . . .]
[[ ]
[ ]] Process finished with exit code

创建标准正态分布数组:

# -*- coding: utf- -*-

import numpy as np

a = np.random.randn(,)
print(a)

输出:

/usr/bin/python2. /Users/jackey/Documents/python/tensorflow/numpydemo.py
[[-0.16777072 1.15536929 0.15206009]
[ 0.36466659 0.39643679 -1.06021005]] Process finished with exit code

创建随机分布整数型数组。

利用 randint([low,high],size) 创建一个整数型指定范围在 [low.high] 之间的数组:

# -*- coding: utf- -*-

import numpy as np

a = np.random.randint(,,(,))
print(a)

输出:

/usr/bin/python2. /Users/jackey/Documents/python/tensorflow/numpydemo.py
[[ ]
[ ]
[ ]] Process finished with exit code

从已有的数组创建数组

numpy.asarray

numpy.asarray 类似 numpy.array,但 numpy.asarray 只有三个,比 numpy.array 少两个。

numpy.asarray(a, dtype = None, order = None)

示例:

# -*- coding: utf- -*-

import numpy as np

# 将列表转换为ndarray
x = [,,]
a = np.asarray(x)
print(a) # 将元组列表转换为 ndarray
x = [(,,),(,)]
a = np.asarray(x)
print(a) # 设置了dtype参数
x = [,,]
a = np.asarray(x, dtype=float)
print(a)

输出:

/usr/bin/python2. /Users/jackey/Documents/python/tensorflow/numpydemo.py
[ ]
[(, , ) (, )]
[. . .] Process finished with exit code

numpy.frombuffer

numpy.frombuffer 用于实现动态数组。

numpy.frombuffer 接受 buffer 输入参数,以流的形式读入转化成 ndarray 对象。

numpy.frombuffer(buffer, dtype = float, count = -, offset = )
注意:buffer 是字符串的时候,Python3 默认 str 是 Unicode 类型,所以要转成 bytestring 在原 str 前加上 b。

示例:

# -*- coding: utf- -*-

import numpy as np

s = 'Hello world!'
a = np.frombuffer(s, dtype='S1')
print(a)

输出:

/usr/bin/python2. /Users/jackey/Documents/python/tensorflow/numpydemo.py
['H' 'e' 'l' 'l' 'o' ' ' 'w' 'o' 'r' 'l' 'd' '!'] Process finished with exit code

numpy.fromiter

numpy.fromiter 方法从可迭代对象中建立 ndarray 对象,返回一维数组。

numpy.fromiter(iterable, dtype, count=-)

示例:

# -*- coding: utf- -*-

import numpy as np

# 使用 range 函数创建列表对象
list = range()
it = iter(list) # 使用迭代器创建 ndarray
x = np.fromiter(it, dtype=float)
print(x)

输出:

/usr/bin/python2. /Users/jackey/Documents/python/tensorflow/numpydemo.py
[. . . . .] Process finished with exit code

从数值范围创建数组

numpy.arange

numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象,函数格式如下:

numpy.arange(start, stop, step, dtype)

# -*- coding: utf- -*-

import numpy as np

x = np.arange()
print(x) x = np.arange(,,,'float')
print(x)

输出:

/usr/bin/python2. /Users/jackey/Documents/python/tensorflow/numpydemo.py
[ ]
[. .] Process finished with exit code

numpy.linspace

numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:

np.linspace(start, stop, num=, endpoint=True, retstep=False, dtype=None)

示例:

# -*- coding: utf- -*-

import numpy as np

a = np.linspace(,,)
print(a) a = np.linspace(,,)
print(a) a = np.linspace(,,,endpoint=False)
print(a) a = np.linspace(,,,endpoint=True)
print(a)

输出:

/usr/bin/python2. /Users/jackey/Documents/python/tensorflow/numpydemo.py
[ . . . . . . . . . .]
[. . . . . . . . . .]
[. . . . .]
[. 12.5 . 17.5 . ] Process finished with exit code

AI探索(四)NumPy库的使用的更多相关文章

  1. Numpy库的学习(四)

    我们今天继续学习一下Numpy库 接着前面几次讲的,Numpy中还有一些标准运算 a = np.arange(3) print(a) print(np.exp(a)) print(np.sqrt(a) ...

  2. numpy库:常用基本

    numpy 本文主要列出numpy模块常用方法 大部分内容来源于网络,而后经过自己的一点思考和总结,如果有侵权,请联系我 我是一名初学者,有哪些地方有错误请留言,我会及时更改的 创建矩阵(采用ndar ...

  3. 初识NumPy库-基本操作

    ndarray(N-dimensional array)对象是整个numpy库的基础. 它有以下特点: 同质:数组元素的类型和大小相同 定量:数组元素数量是确定的 一.创建简单的数组: np.arra ...

  4. numpy库常用基本操作

    NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量.比如说,二维数组相当于是一个一维数 ...

  5. numpy 库使用

    numpy 库简单使用 一.numpy库简介 Python标准库中提供了一个array类型,用于保存数组类型的数据,然而这个类型不支持多维数据,不适合数值运算.作为Python的第三方库numpy便有 ...

  6. 数据分析与科学计算可视化-----用于科学计算的numpy库与可视化工具matplotlib

    一.numpy库与matplotlib库的基本介绍 1.安装 (1)通过pip安装: >> pip install matplotlib 安装完成 安装matplotlib的方式和nump ...

  7. numpy 库简单使用

    numpy 库简单使用 一.numpy库简介 Python标准库中提供了一个array类型,用于保存数组类型的数据,然而这个类型不支持多维数据,不适合数值运算.作为Python的第三方库numpy便有 ...

  8. 王亮:游戏AI探索之旅——从alphago到moba游戏

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云加社区技术沙龙 发表于云+社区专栏 演讲嘉宾:王亮,腾讯AI高级研究员.2013年加入腾讯,从事大数据预测以及游戏AI研发工作.目前 ...

  9. (一)初识NumPy库(数组的创建和变换)

    在学习数据分析时,NumPy作为最基础的数据分析库,我们能够熟练的掌握它是学习数据分析的必要条件.接下来就让我们学习该库吧. 学习NumPy库的环境: python:3.6.6 编辑器:pycharm ...

  10. numpy库的学习笔记

    一.ndarray 1.numpy 库处理的最基础数据类型是由同种元素构成的多维数组(ndarray),简称“数组”. 2.ndarray是一个多维数组的对象,ndarray数组一般要求所有元素类型相 ...

随机推荐

  1. 数据库之MySQL(四)

    数据库中的范式: 第一范式(1NF): 数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性. 例如: userInfo: '山东省烟台市 1318162008' 依照第一范式 ...

  2. jQuery中删除节点方法remove()、detach()、empty()分析

    jQuery中提供了三种删除节点的方法:remove().detach().empty(),本文详细分析这三种方法. 最容易区分的是empty(),该方法严格上属于“清空节点”,即删除其子节点,自身并 ...

  3. RecyclerView添加分割线

    mRecyclerView = findView(R.id.id_recyclerview); //设置布局管理器 mRecyclerView.setLayoutManager(layout); // ...

  4. Js onload 解析

    Js onload的使用方法. 1.在script中调用 window.onload = function(){ function1(); function2(); function3(); }; 或 ...

  5. Scalability, Availability & Stability Patterns

    https://blog.csdn.net/ajian005/article/details/6191814   一 自我有要求的读者应该提出问题:(研习:掌握层次:)能力级别:不会(了解)——领会( ...

  6. tcp/ip 中的分组和分片

    osi 大家应该都知道osi七层模型吧,物理层 链路层 网络层 传输层 会话层 表示层 应用层ip 属于网络层,tcp 属于传输层,你可以把每一层想像成粽子的粽叶,包裹了七层的粽子最外面的就是物理层, ...

  7. 【Head First Servlets and JSP】笔记9:属性的作用域、线程安全

    什么是属性? 属性和参数 属性的3个作用域 属性API 属性不好的一面 1.到底什么是属性(Attribute)? 属性就是一个对象,可以被设置(bound,也可以叫绑定)到另外三个servlet A ...

  8. Django框架之cookie和session及开发登录功能

    1.cookie是什么? Web应用程序是使用HTTP协议传输数据的.HTTP协议是无状态的协议.一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接.这就意味着服务器无法从 ...

  9. verilog中一些基本的门电路如pmos和nmos等

    最近在分析波形的时候,发现某个PAD模型的行为与想象的不一致,就进入stdcell里面看了下,主要是pmos和nmos相关的东西,暂列如下: 开关级基元14种 是实际的MOS关的抽象表示,分电阻型(前 ...

  10. 三、golang时间、流程控、函数

    一.本篇内容 1.string和strconv使用 2.go中的时间和日期类型 3.流程控制 4.函数讲解 二.string和strconv使用 1.  string.HasPrefix(s trin ...