Numpy 多维数据数组的实现


Posted in Python onJune 18, 2020

numpy包(模块)几乎总是用于Python中的数值计算。这个软件包为Python提供了高性能的向量、矩阵、张量数据类型。它是在C和Fortran中创建的,因此当计算被矢量化(用矩阵和矢量表示操作)时,性能很高。

1.模块的导入:

%matplotlib inline
import matplotlib.pyplot as plt
from numpy import *

2.数组创建numpy

有几种初始化numpy数组的方法,例如:使用Python的list或tuple。使用旨在创建Numpy数组的函数,如arrange、linspace等。从文件中读取数据(例如Python pickle格式)

2.1根据列表创建numpy.array

v = array([1,2,3,4])
v

Numpy 多维数据数组的实现

M = array([[1, 2], [3, 4]])
M

Numpy 多维数据数组的实现

v和M 都是ndarray类型的对象,由numpy模块创建。

type(v), type(M)

Numpy 多维数据数组的实现

v数组和M数组的区别在于它们的尺寸(形式)。我们可以使用ndarray.shape属性来获取大小信息。

v.shape

Numpy 多维数据数组的实现

M.shape

Numpy 多维数据数组的实现

矩阵中元素的数量可以通过属性ndarray.size

M.size

Numpy 多维数据数组的实现

也可以使用numpy方法numpy.shape 和 numpy.size

shape(M)

Numpy 多维数据数组的实现

size(M)

Numpy 多维数据数组的实现

numpy.ndarray 看起来像一个普通的 Python 列表。使用它们而不是Python列表有几个原因。

Python的列表是非常常见的。它们可以包含任何对象。他们是动态类型化的。它们不支持矩阵和诗词作品等数学运算。由于动态类型的原因,在Python中用list实现这种操作并不是很有效。
Numpy数组是静态类型化和同质化的。元素类型是在创建数组时定义的(那么数组数据类型可以改变)。
Numpy数组不是很耗费内存。
得益于静态类型化,数学函数如乘积和numpy数组的和可以在编译语言中实现(使用C和Fortran)。
使用ndarray数组的dtype(数据类型)属性,我们可以看到数组的数据类型。

M.dtype

Numpy 多维数据数组的实现

试图分配一个错误类型(不一样的类型)的值会导致错误。

M[0,0] = "hello"

Numpy 多维数据数组的实现

创建数组时,可以分别指定数据类型。

M = array([[1, 2], [3, 4]], dtype=complex)
M

Numpy 多维数据数组的实现

通常使用以下dtype值:int、float、complex、bool、object等。

我们也可以用比特来指定大小:int64、int16、float128、complex128。

3.使用函数生成数组

使用python列表来指定大型数组是不切实际的。你可以使用各种Numpy方法。

3.1arrange

x = arange(0, 10, 1) # arguments: start, stop, step
x

Numpy 多维数据数组的实现

x = arange(-1, 1, 0.1)
x

Numpy 多维数据数组的实现

3.2linspace 和 logspace

使用linspace,区间的两端都被包括在内,参数:(开始,停止,点的数量)

linspace(0, 10, 25)

Numpy 多维数据数组的实现

logspace(0, 10, 10, base=e)

Numpy 多维数据数组的实现

3.3mgrid

x, y = mgrid[0:5, 0:5]
x
y

Numpy 多维数据数组的实现Numpy 多维数据数组的实现

3.4随机数

#导入所需模块
from numpy import random
#区间[0,1]内的均匀分布数。
random.rand(5,5)

Numpy 多维数据数组的实现

#来自于正态分布的随机数
random.randn(5,5)

Numpy 多维数据数组的实现

3.6diag

#对角矩阵
diag([1,2,3])

Numpy 多维数据数组的实现

#偏移对角矩阵
diag([1,2,3], k=1)

Numpy 多维数据数组的实现

3.5零和单位矩阵

zeros((3,3))

Numpy 多维数据数组的实现

ones((3,3))

Numpy 多维数据数组的实现

4.文件导入和导出

4.1逗号分隔的值(CSV)

一个非常常见的数据存储格式是CSV,以及类似的格式,如TSV(制表分隔值)。要从这些文件中读取数据,你可以使用以下方法numpy.genfromtxt

data = genfromtxt('stockholm_td_adj.dat')
data.shape

Numpy 多维数据数组的实现

fig, ax = plt.subplots(figsize=(14,4))
ax.plot(data[:,0]+data[:,1]/12.0+data[:,2]/365, data[:,5])
ax.axis('tight')
ax.set_title('Температура в Стокгольме')
ax.set_xlabel('год')
ax.set_ylabel('температура (C)');

Numpy 多维数据数组的实现

使用numpy.savetxt我们可以将数组保存在CSV中。

M = random.rand(3,3)
M

Numpy 多维数据数组的实现

savetxt("random-matrix.csv", M)
savetxt("random-matrix.csv", M, fmt='%.5f') # fmt 指定格式

4.2numpy数组的主要文件格式。

保存和读取的方法numpy.save 和 numpy.load

save("random-matrix.npy", M)
load("random-matrix.npy")

Numpy 多维数据数组的实现

4.3numpy数组的其他属性

M.itemsize#每个byte中的单元数
M.nbytes#byte数目
M.ndim#单位数,计数

5.使用数组

5.1编制索引

你可以使用方括号和索引来选择数组的元素。

# v是一个只有一个维度的向量,所以一个索引就足以获得元素。
v[0]

Numpy 多维数据数组的实现

# M是一个矩阵(二维数组),所以需要两个索引(行,列)。
M[1,1]

Numpy 多维数据数组的实现

如果我们省略了多维数组中的索引,就会返回一些值(一般情况下,N-1维的数组)。

M

Numpy 多维数据数组的实现

M[1]

Numpy 多维数据数组的实现

M[1,:]#第一行

Numpy 多维数据数组的实现

M[:,1]#第一列

Numpy 多维数据数组的实现

使用索引,你可以为单个数组元素赋值。

M[0,0] = 1
M

也适用于行和列

#也适用于行和列
M[1,:] = 0
M[:,2] = -1
M

Numpy 多维数据数组的实现

5.2选择数组的一部分

你可以使用M[lower:uperior:step]语法来获取一个数组的一部分。

A = array([1,2,3,4,5])
A

Numpy 多维数据数组的实现

A[1:3]

Numpy 多维数据数组的实现

数组的部分是可变的:如果给它们分配新的值,那么从它们提取的数组就会改变原来的数组。

A[1:3] = [-2,-3]
A

Numpy 多维数据数组的实现

我们可以省略M[lower:upper:step]中的部分参数。

A[::]#下限、上限、默认步数

Numpy 多维数据数组的实现

低于零的指数从数组的末端开始计算。

A = array([1,2,3,4,5])
A[-1]#最后一个元素
A[-3:]#最后三个元素

索引分区也适用于多维数组。

A = array([[n+m*10 for n in range(5)] for m in range(5)]) 
A

Numpy 多维数据数组的实现

#方阵
A[1:4, 1:4]

Numpy 多维数据数组的实现

#渐进,带有指定间隔数
A[::2, ::2]

Numpy 多维数据数组的实现

5.3先进的索引方法

数组的值可以作为选择项目的索引。

row_indices = [1, 2, 3]
A[row_indices]

Numpy 多维数据数组的实现

col_indices = [1, 2, -1]
A[row_indices, col_indices]

Numpy 多维数据数组的实现

你也可以使用掩码:如果掩码类型为bool,那么根据掩码元素的值与相应的索引,选择该元素(True)或不选择(False)。

B = array([n for n in range(5)])
B

Numpy 多维数据数组的实现

row_mask = array([True, False, True, False, False])
B[row_mask]

Numpy 多维数据数组的实现

row_mask = array([1,0,1,0,0], dtype=bool)
B[row_mask]

Numpy 多维数据数组的实现

这个函数对于根据某些条件从数组中选择元素非常有用。

x = arange(0, 10, 0.5)
x

Numpy 多维数据数组的实现

mask = (5 < x) * (x < 7.5)
mask

Numpy 多维数据数组的实现

x[mask]

Numpy 多维数据数组的实现

5.4从数组中提取数据和创建数组的函数。

5.4.1where

索引掩码可以通过使用以下方法转换为位置索引 where

indices = where(mask)
indices

Numpy 多维数据数组的实现

x[indices]#这个索引相当于x[mask]的索引。

Numpy 多维数据数组的实现

5.4.2diag

使用diag函数还可以提取对角线和子对角线元素。

diag(A)

Numpy 多维数据数组的实现

diag(A,-1)

Numpy 多维数据数组的实现

5.4.3take

类似于上述的索引方法。

v2 = arange(-3,3)
v2

Numpy 多维数据数组的实现

row_indices = [1, 3, 5]
v2[row_indices]

Numpy 多维数据数组的实现

v2.take(row_indices)

Numpy 多维数据数组的实现

但take也可以在列表和其他对象上工作。

take([-3, -2, -1, 0, 1, 2], row_indices)

Numpy 多维数据数组的实现

5.4.4choose

从多个数组中提取数值。

which = [1, 0, 1, 0]
choices = [[-2,-2,-2,-2], [5,5,5,5]]
 
choose(which, choices) # 0th elem of 0 array, 1st elem of 1 array, ...

Numpy 多维数据数组的实现

6.线性代数

6.1点积运算

v1 = arange(0, 5)
v1 * 2

Numpy 多维数据数组的实现

v1 + 2

Numpy 多维数据数组的实现

A * 2

Numpy 多维数据数组的实现

A + 2

Numpy 多维数据数组的实现

6.2基础运算

A * A

Numpy 多维数据数组的实现

v1 * v1

Numpy 多维数据数组的实现

A.shape, v1.shape

Numpy 多维数据数组的实现

A * v1

Numpy 多维数据数组的实现

7.矩阵

7.1矩阵

dot(A, A)

Numpy 多维数据数组的实现

dot(A, v1)

Numpy 多维数据数组的实现

dot(v1, v1)

Numpy 多维数据数组的实现

也可以将数组转换为矩阵的类型。然后再根据矩阵代数的规律进行+、-、*的算术运算。

M = matrix(A)
v = matrix(v1).T#换位
v

Numpy 多维数据数组的实现

M * M

Numpy 多维数据数组的实现

M * v

Numpy 多维数据数组的实现

v.T * v

Numpy 多维数据数组的实现

v + M*v

Numpy 多维数据数组的实现

8.数据处理

shape(data)

Numpy 多维数据数组的实现

8.1平均值

#温度柱
mean(data[:,3])

Numpy 多维数据数组的实现

过去200年,斯德哥尔摩的平均气温在6.2摄氏度左右。

8.2标准差和离散度

std(data[:,3]), var(data[:,3])

Numpy 多维数据数组的实现

8.3sum, prod, и trace

d = arange(0, 10)
d

Numpy 多维数据数组的实现

#求和
sum(d)

Numpy 多维数据数组的实现

#所有元素的乘积
prod(d+1)
#累计总和
cumsum(d)

Numpy 多维数据数组的实现

#累积乘积
cumprod(d+1)
#和diag(A).sum()一样
trace(A)

Numpy 多维数据数组的实现

8.4多变量数据

m = random.rand(3,3)
m

Numpy 多维数据数组的实现

m.max()

Numpy 多维数据数组的实现

#每列最大值 
m.max(axis=0)

Numpy 多维数据数组的实现

#每行最大值 
m.max(axis=1)

Numpy 多维数据数组的实现

9.改变阵列的形状和大小

A

Numpy 多维数据数组的实现

n, m = A.shape
B = A.reshape((1,n*m))
B

Numpy 多维数据数组的实现

B[0,0:5] = 5
B

Numpy 多维数据数组的实现

A

Numpy 多维数据数组的实现

B = A.flatten()
B

Numpy 多维数据数组的实现

B[0:5] = 10
B

Numpy 多维数据数组的实现

#A没有改变,因为B是A的副本,不是同一个对象的引用。
A

Numpy 多维数据数组的实现

10.增加一个新的度量newaxis

v = array([1,2,3])
shape(v)

Numpy 多维数据数组的实现

#向量 -> 单列矩阵
v[:, newaxis]

Numpy 多维数据数组的实现

#尺寸
v[:,newaxis].shape

Numpy 多维数据数组的实现

v[newaxis,:].shape

Numpy 多维数据数组的实现

11.联合

b = array([[5, 6]])
a = array([[5, 6]])
concatenate((a, b), axis=0)

Numpy 多维数据数组的实现

concatenate((a, b), axis=1)

Numpy 多维数据数组的实现

12.hstack and vstack

vstack((a,b))

Numpy 多维数据数组的实现

hstack((a,b))

Numpy 多维数据数组的实现

13.Copy и "deep copy"

A = array([[1, 2], [3, 4]])
A

Numpy 多维数据数组的实现

#B等同于A
B = A 
#改变B,将影响A
B[0,0] = 10
 
B

Numpy 多维数据数组的实现

A

Numpy 多维数据数组的实现

B = copy(A)
#现在改变B将不再影响A
B[0,0] = -5
B

Numpy 多维数据数组的实现

A

Numpy 多维数据数组的实现

14.矩阵的循环

v = array([1,2,3,4])
 
for element in v:
  print(element)

Numpy 多维数据数组的实现

M = array([[1,2], [3,4]])
 
for row in M:
  print("row", row)
  
  for element in row:
    print(element)

Numpy 多维数据数组的实现

通过枚举,可以同时获得元素的值和索引。

for row_idx, row in enumerate(M):
  print("row_idx", row_idx, "row", row)
  
  for col_idx, element in enumerate(row):
    print("col_idx", col_idx, "element", element)
    
    # update the matrix M: square each element
    M[row_idx, col_idx] = element ** 2

Numpy 多维数据数组的实现

#每个元素现在都是列表
M

Numpy 多维数据数组的实现

到此这篇关于Numpy 多维数据数组的实现的文章就介绍到这了,更多相关Numpy 多维数据数组内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python help()函数用法详解
Mar 11 Python
python运行其他程序的实现方法
Jul 14 Python
python3+selenium自动化测试框架详解
Mar 17 Python
人工神经网络算法知识点总结
Jun 11 Python
使用python 写一个静态服务(实战)
Jun 28 Python
python写入文件自动换行问题的方法
Jul 05 Python
python内存动态分配过程详解
Jul 15 Python
基于keras 模型、结构、权重保存的实现
Jan 24 Python
keras获得model中某一层的某一个Tensor的输出维度教程
Jan 24 Python
tensorflow2.0保存和恢复模型3种方法
Feb 03 Python
Pyqt助手安装PyQt5帮助文档过程图解
Nov 20 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
Jun 13 Python
python读取图像矩阵文件并转换为向量实例
Jun 18 #Python
Python datetime模块使用方法小结
Jun 18 #Python
Python读取Excel数据并生成图表过程解析
Jun 18 #Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
Jun 18 #Python
python名片管理系统开发
Jun 18 #Python
一文轻松掌握python语言命名规范规则
Jun 18 #Python
Python学习之路之pycharm的第一个项目搭建过程
Jun 18 #Python
You might like
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
10款实用的PHP开源工具
2015/10/23 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
2017/04/09 PHP
[原创]来自ImageSee官方 JavaScript图片浏览器
2008/01/16 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
JavaScript中的闭包
2016/02/24 Javascript
用jmSlip编写移动端顶部日历选择控件
2016/10/24 Javascript
JS异步文件分片断点上传的实现思路
2016/12/25 Javascript
three.js实现圆柱体
2018/12/30 Javascript
JS解惑之Object中的key是有序的么
2019/05/06 Javascript
Vue多环境代理配置方法思路详解
2019/06/21 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
React实现todolist功能
2020/12/28 Javascript
[56:29]Secret vs Optic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python错误处理详解
2014/09/28 Python
一步步解析Python斗牛游戏的概率
2016/02/12 Python
Python标准库06之子进程 (subprocess包) 详解
2016/12/07 Python
scrapy spider的几种爬取方式实例代码
2018/01/25 Python
Python 利用pydub库操作音频文件的方法
2019/01/09 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
python Matplotlib数据可视化(1):简单入门
2020/09/30 Python
利用HTML5 Canvas制作一个简单的打飞机游戏
2015/05/11 HTML / CSS
澳大利亚珠宝商:Shiels
2019/10/06 全球购物
Ejb技术面试题
2015/04/29 面试题
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
成功的酒店创业计划书
2013/12/27 职场文书
物流合作计划书
2014/01/10 职场文书
好军嫂事迹材料
2014/01/15 职场文书
大专生毕业的自我评价
2014/02/06 职场文书
小学生作文评语大全
2014/04/21 职场文书
教师节慰问信
2015/02/15 职场文书
公司年夜饭通知
2015/04/25 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书