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使用xlrd模块操作Excel数据导入的方法
May 26 Python
python 网络爬虫初级实现代码
Feb 27 Python
基于Python代码编辑器的选用(详解)
Sep 13 Python
Python输出带颜色的字符串实例
Oct 10 Python
Python简单实现网页内容抓取功能示例
Jun 07 Python
Python面向对象之类的封装操作示例
Jun 08 Python
python 画二维、三维点之间的线段实现方法
Jul 07 Python
python的range和linspace使用详解
Nov 27 Python
Python如何解除一个装饰器
Aug 07 Python
如何使用 Python 读取文件和照片的创建日期
Sep 05 Python
详解java调用python的几种用法(看这篇就够了)
Dec 10 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
Jan 27 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产生随机字符串函数
2006/12/06 PHP
php结合md5的加密解密算法实例
2016/09/30 PHP
[原创]php正则删除html代码中class样式属性的方法
2017/05/24 PHP
js获取div高度的代码
2008/08/09 Javascript
JavaScript 对象成员的可见性说明
2009/10/16 Javascript
dess中一个简单的多路委托的实现
2010/07/20 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
基于jQuery实现select下拉选择可输入附源码下载
2016/02/03 Javascript
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
AngularJS页面带参跳转及参数解析操作示例
2017/06/28 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
2018/10/08 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
Django与JS交互的示例代码
2017/08/23 Python
详解 Python 与文件对象共事的实例
2017/09/11 Python
Python实现微信小程序支付功能
2019/07/25 Python
python各类经纬度转换的实例代码
2019/08/08 Python
关于ZeroMQ 三种模式python3实现方式
2019/12/23 Python
Pyinstaller 打包发布经验总结
2020/06/02 Python
python3字符串输出常见面试题总结
2020/12/01 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
荷兰天然和有机产品网上商城:BigGreenSmile.nl
2020/07/26 全球购物
华为的Java面试题
2014/03/07 面试题
应用化学专业职业生涯规划书
2013/12/31 职场文书
药学专业个人的自我评价
2013/12/31 职场文书
升旗仪式主持词
2014/03/19 职场文书
群众路线教育实践活动民主生活会个人检查对照思想汇报
2014/10/04 职场文书
详解MySQL的半同步
2021/04/22 MySQL
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle
Python tensorflow卷积神经Inception V3网络结构
2022/05/06 Python
python playwrigh框架入门安装使用
2022/07/23 Python