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 相关文章推荐
PyCharm使用教程之搭建Python开发环境
Jun 07 Python
python绘制热力图heatmap
Mar 23 Python
值得收藏,Python 开发中的高级技巧
Nov 23 Python
python 发送和接收ActiveMQ消息的实例
Jan 30 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
Mar 20 Python
Python使用scrapy爬取阳光热线问政平台过程解析
Aug 14 Python
解决python -m pip install --upgrade pip 升级不成功问题
Mar 05 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
Jun 02 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
Aug 07 Python
如何基于Python实现word文档重新排版
Sep 29 Python
python3中布局背景颜色代码分析
Dec 01 Python
详解在OpenCV中如何使用图像像素
Mar 03 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中随机显示图片的函数代码
2011/06/23 PHP
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
php绘图之加载外部图片的方法
2015/01/24 PHP
php创建session的方法实例详解
2015/01/27 PHP
php自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
PHP下载文件函数与用法示例
2019/09/27 PHP
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
编写自己的jQuery插件简单实现代码
2011/04/19 Javascript
jQuery load方法用法集锦
2011/12/06 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
教你如何使用node.js制作代理服务器
2014/11/26 Javascript
jQuery中:header选择器用法实例
2014/12/29 Javascript
对Web开发中前端框架与前端类库的一些思考
2015/03/27 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
js实现右键自定义菜单
2016/12/03 Javascript
layui之select的option叠加问题的解决方法
2018/03/08 Javascript
python3 模拟登录v2ex实例讲解
2017/07/13 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
python实现简单飞行棋
2020/02/06 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
python中常用的数据结构介绍
2021/01/12 Python
CSS3实现闪烁动画效果的方法
2015/02/09 HTML / CSS
Looking4Parking美国:全球排名第一的机场停车比较品牌
2019/08/26 全球购物
审计工作个人的自我评价
2013/12/25 职场文书
结婚典礼证婚词
2014/01/08 职场文书
高中生期末评语
2014/01/28 职场文书
《海底世界》教学反思
2014/04/16 职场文书
运动会口号8字
2014/06/07 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
小学班主任经验交流材料
2014/12/16 职场文书
在职证明格式样本
2015/06/15 职场文书
聘任书格式及范文
2015/09/21 职场文书