AI探索(四)NumPy库的使用

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 = 0)

示例1: 一维数组

import numpy as np

a = np.array([1,2,3])
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([[1,2,3],[4,5,6]])
print a

输出:

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

Process finished with exit code 0

示例3:二维数组

import numpy as np

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

输出:

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

Process finished with exit code 0

示例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-8 -*-

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.7 /Users/jackey/Documents/python/tensorflow/numpydemo.py
int32
int64

Process finished with exit code 0

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

# -*- coding: UTF-8 -*-

import numpy as np

dt = np.dtype([(‘age‘,np.int8)])
print(dt)

a = np.array([(10,),(20,),(30,)], dtype=dt)
print(a)

print(a[‘age‘])

输出:

/usr/bin/python2.7 /Users/jackey/Documents/python/tensorflow/numpydemo.py
[(‘age‘, ‘i1‘)]
[(10,) (20,) (30,)]
[10 20 30]

Process finished with exit code 0

示例:

# -*- coding: utf-8 -*-

import numpy as np

student = np.dtype([(‘name‘,‘S20‘), (‘age‘,‘i1‘), (‘marks‘,‘f4‘)])
print(student)

a = np.array([(‘abc‘,21,50),(‘xyz‘,18,75)], dtype=student)
print(a)

输出:

/usr/bin/python2.7 /Users/jackey/Documents/python/tensorflow/numpydemo.py
[(‘name‘, ‘S20‘), (‘age‘, ‘i1‘), (‘marks‘, ‘<f4‘)]
[(‘abc‘, 21, 50.) (‘xyz‘, 18, 75.)]

Process finished with exit code 0

Numpy数组

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

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

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

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

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

示例:

# -*- coding: utf-8 -*-

import numpy as np

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

输出:

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

Process finished with exit code 0

ndarray.shape

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

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

示例:

# -*- coding: utf-8 -*-

import numpy as np

a = np.array([[1,2,3],[4,5,6]])
print(a.shape)

a.shape = (6,1)
print(a)

a.shape = (1,6)
print(a)

输出:

/usr/bin/python2.7 /Users/jackey/Documents/python/tensorflow/numpydemo.py
(2, 3)
[[1]
 [2]
 [3]
 [4]
 [5]
 [6]]
[[1 2 3 4 5 6]]

Process finished with exit code 0

ndarray.itemsize

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

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

示例:

# -*- coding: utf-8 -*-

import numpy as np

x = np.array([1,2,3,4,5],dtype=np.int8)
print(x)
print(x.itemsize)

y = np.array([1,2,3,4,5], dtype=np.float64)
print(y)
print(y.itemsize)

输出:

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

Process finished with exit code 0

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

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

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

示例:

# -*- coding: utf-8 -*-

import numpy as np

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

输出:

/usr/bin/python2.7 /Users/jackey/Documents/python/tensorflow/numpydemo.py
[[                   0 -9223363263373412019]
 [     140375703420932      140375703442528]
 [          4345035248      140375703442504]]

Process finished with exit code 0

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

numpy.zeros

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

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

示例:

# -*- coding: utf-8 -*-

import numpy as np

# 默认为浮点数
x = np.zeros(5)
print(x)

# 设置类型为整数
y = np.zeros((5,), dtype=np.int)
print(y)

# 自定义类型
z = np.zeros((2,2), dtype=[(‘x‘, ‘i4‘), (‘y‘,‘i4‘)])
print(z)

输出:

/usr/bin/python2.7 /Users/jackey/Documents/python/tensorflow/numpydemo.py
[0. 0. 0. 0. 0.]
[0 0 0 0 0]
[[(0, 0) (0, 0)]
 [(0, 0) (0, 0)]]

Process finished with exit code 0

numpy.ones

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

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

示例:

# -*- coding: utf-8 -*-

import numpy as np

# 默认为浮点数
x = np.ones(5)
print(x)

# 自定义类型
x = np.ones([2,2],dtype=int)
print(x)

输出:

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

Process finished with exit code 0

创建标准正态分布数组:

# -*- coding: utf-8 -*-

import numpy as np

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

输出:

/usr/bin/python2.7 /Users/jackey/Documents/python/tensorflow/numpydemo.py
[[-0.16777072  1.15536929  0.15206009]
 [ 0.36466659  0.39643679 -1.06021005]]

Process finished with exit code 0

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

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

# -*- coding: utf-8 -*-

import numpy as np

a = np.random.randint(100,200,(3,3))
print(a)

输出:

/usr/bin/python2.7 /Users/jackey/Documents/python/tensorflow/numpydemo.py
[[172 166 115]
 [191 126 165]
 [195 171 198]]

Process finished with exit code 0

从已有的数组创建数组

numpy.asarray

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

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

示例:

# -*- coding: utf-8 -*-

import numpy as np

# 将列表转换为ndarray
x = [1,2,3]
a = np.asarray(x)
print(a)

# 将元组列表转换为 ndarray
x = [(1,2,3),(4,5)]
a = np.asarray(x)
print(a)

# 设置了dtype参数
x = [1,2,3]
a = np.asarray(x, dtype=float)
print(a)

输出:

/usr/bin/python2.7 /Users/jackey/Documents/python/tensorflow/numpydemo.py
[1 2 3]
[(1, 2, 3) (4, 5)]
[1. 2. 3.]

Process finished with exit code 0

numpy.frombuffer

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

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

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

示例:

# -*- coding: utf-8 -*-

import numpy as np

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

输出:

/usr/bin/python2.7 /Users/jackey/Documents/python/tensorflow/numpydemo.py
[‘H‘ ‘e‘ ‘l‘ ‘l‘ ‘o‘ ‘ ‘ ‘w‘ ‘o‘ ‘r‘ ‘l‘ ‘d‘ ‘!‘]

Process finished with exit code 0

numpy.fromiter

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

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

示例:

# -*- coding: utf-8 -*-

import numpy as np

# 使用 range 函数创建列表对象
list = range(5)
it = iter(list)

# 使用迭代器创建 ndarray
x = np.fromiter(it, dtype=float)
print(x)

输出:

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

Process finished with exit code 0

从数值范围创建数组

numpy.arange

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

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

# -*- coding: utf-8 -*-

import numpy as np

x = np.arange(5)
print(x)

x = np.arange(1,5,2,‘float‘)
print(x)

输出:

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

Process finished with exit code 0

numpy.linspace

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

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

示例:

# -*- coding: utf-8 -*-

import numpy as np

a = np.linspace(1,10,10)
print(a)

a = np.linspace(1,1,10)
print(a)

a = np.linspace(10,20,5,endpoint=False)
print(a)

a = np.linspace(10,20,5,endpoint=True)
print(a)

输出:

/usr/bin/python2.7 /Users/jackey/Documents/python/tensorflow/numpydemo.py
[ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[10. 12. 14. 16. 18.]
[10.  12.5 15.  17.5 20. ]

Process finished with exit code 0

原文地址:https://www.cnblogs.com/zhouxihi/p/10117601.html

时间: 2024-11-07 16:42:48

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

数据分析之Numpy库入门

1.列表与数组 在python的基础语言部分,我们并没有介绍数组类型,但是像C.Java等语言都是有数组类型的,那python中的列表和数组有何区别呢? 一维数据:都表示一组数据的有序结构 区别: 列表:数据类型可以不同,如:[3.1413,'pi',3.1404,[3.1402,2.34],'3.2376'] 数组:数据类型相同 .如[3.14,34.34,3433.3,343.23] 二维数据:二维数据由多个一维数据构成,是一维数据的集合形式!表格是典型的二维数据! 注意:表格的表头,可以是

Numpy库进阶教程(二)

第一篇在这里:Numpy库进阶教程(一)求解线性方程组 求解特征值和特征向量 关于特征值和特征向量的介绍,可以点击这里 首先创建一个矩阵 In [1]: A=mat("3 -2;1 0") In [2]: A Out[2]: matrix([[ 3, -2], [ 1, 0]]) 在numpy.linalg模块中,eigvals函数可以计算矩阵的特征值,而eig函数可以返回一个包含特征值和对应特征向量的元组. 使用eigvals函数求解特征值 In [3]: linalg.eigval

数据分析与展示——NumPy库入门

这是我学习北京理工大学嵩天老师的<Python数据分析与展示>课程的笔记.嵩老师的课程重点突出.层次分明,在这里特别感谢嵩老师的精彩讲解. NumPy库入门 数据的维度 维度是一组数据的组织形式.数据维度就是在数据之间形成特定关系表达多种含义的一个概念. 一维数据: 一维数据由对等关系的有序或无序数据构成,采用线性方式组织.对应列表.数组和集合等概念. 列表和数组:一组数据的有序结构. 区别: 列表:数据类型可以不同 数组:数据类型相同 二维数据: 二维数据由多个一维数据构成,是一维数据的组合

Panda和numpy库和matplotlib库的安装

好久没有用python了 论文决定使用python 朴素贝叶斯和逻辑斯蒂 手生....连cmd命令都快忘记了 所以来重新复习一遍:cd C: 也就是在cmd中,可以敲打cd加上盘符的冒号就可以切换, 其次就是,使用pip install 下载包,但是要先进入Python27/Scpripts 才可以 而我是忘记了..直接在Python27里面用了...不过也没有提示我如何 只是说我的pip要更新  由于直接给出了一个命令提示 ' python -m pip install --upgrade p

python数据分析实战-第3章-numpy库

第3章 NumPy库 32 3.1 NumPy简史 32 3.2 NumPy安装 32 3.3 ndarray:NumPy库的心脏 33 1 import numpy as np 1 a = np.array([1, 2, 3]) 1 a array([1, 2, 3]) 1 type(a), a.dtype, a.ndim, a.size, a.shape, a.itemsize (numpy.ndarray, dtype('int64'), 1, 3, (3,), 8) 1 b = np.a

python——Numpy库

Numpy库 英文官方文档:https://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html Numpy库中的数组对象:N维数组类型:ndarray 1)      ndarray的作用: a)      数组对象性可以去掉元素间运算所需的循环,使一维向量更像单个数据. b)     设置专门的数组对象,经过优化,可以提升这类应用的运算速度. 2)      ndarray是一个多维数组对象,有两部分组成: 实际的数据 和 描述这些数据

NumPy库实现矩阵计算

随着机器学习技术越来越向着整个社会进行推广,因此学好线性代数和Python当中的numpy库就相当重要了.我们应该知道numpy库的使用是sklearn库和opencv库的基础.主要用于矩阵的计算.当然,我们做做数模或者人工神经网络建模也可以使用MATLAB.不过现在Python才是现在的主流,因为Python可以用于服务器后台的实现,不仅仅看可以用于科研,还可以做出一些比较实用的一些东西.如果还想用于物联网等领域的话,则可以使用C++进行算法的实现.因为我们在嵌入式开发当中,一般使用的是lin

Numpy库的学习(一)

今天来学习一下Python库中,支持高级大量的维度数组与矩阵运算的神奇的Numpy库 Numpy同时也对数组运算提供大量的数学函数,对于大量计算运行效率极好 是大量机器学习框架的基础库 废话不多说,直接开整 Numpy中最核心的结构就是ndarray数组 Numpy中定义的最重要的对象是成为ndarray的N维数组类型 它描述相同类型的元素集合.可以使用基于零的索引访问集合中的项目.大部分的数组操作仅仅是修改元数据部分,而不改变其底层的实际数据. 数组的维数称为秩,简单来说就是如果你需要获取数组

Numpy库的学习(五)

今天继续学习一下Numpy库,废话不多说,整起走 先说下Numpy中,经常会犯错的地方,就是数据的复制 这个问题不仅仅是在numpy中有,其他地方也同样会出现 import numpy as np a = np.arange(12) b = a print(b is a) b.shape = 3,4 print(a.shape) print(id(a)) print(id(b)) 先看看这段代码,我们随便建立了一个numpy数组 然后我想把a这个值,赋值给b,很简单的操作,b = a 那么我们打

用python的matplotlib和numpy库绘制股票K线均线和成交量的整合效果(含量化验证交易策略代码)

在用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)一文里,我讲述了通过爬虫接口得到股票数据并绘制出K线均线图形的方式,在本文里,将在此基础上再引入成交量效果图,并结合量价理论,给出并验证一些交易策略. 1 成交量对量化分析的意义 美国的股市分析家葛兰碧(Joe Granville)在他所著的<股票市场指标>一书里提出著名的“量价理论”.“量价理论”的核心思想是,任何对股价的分析,如果离开了对成交量的分析,都将是无本之木,无水