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的Tornado框架中的日志的方法
May 02 Python
python转换字符串为摩尔斯电码的方法
Jul 06 Python
Python 详解基本语法_函数_返回值
Jan 22 Python
深入理解python中的select模块
Apr 23 Python
python 实时得到cpu和内存的使用情况方法
Jun 11 Python
python操作excel的方法
Aug 16 Python
Python使用pymongo库操作MongoDB数据库的方法实例
Feb 22 Python
OpenCV 轮廓检测的实现方法
Jul 03 Python
在python3中实现更新界面
Feb 21 Python
Python-openCV开运算实例
Jul 05 Python
Python可视化工具如何实现动态图表
Oct 23 Python
使用pipenv管理python虚拟环境的全过程
Sep 25 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操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
PHP中文件缓存转内存缓存的方法
2011/12/06 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
PHP中Array相关函数简介
2016/07/03 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
完整显示当前日期和时间的JS代码
2007/09/17 Javascript
JQuery 文本框使用小结
2010/05/22 Javascript
javascript管中窥豹 形参与实参浅析
2011/12/17 Javascript
jquery1.9 下检测浏览器类型和版本的方法
2013/12/26 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
2017/03/20 Javascript
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
2017/07/05 jQuery
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
python实现广度优先搜索过程解析
2019/10/19 Python
matplotlib交互式数据光标实现(mplcursors)
2021/01/13 Python
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
HTML5实现预览本地图片
2016/02/17 HTML / CSS
推荐10个HTML5响应式框架
2016/02/25 HTML / CSS
俄罗斯化妆品和香水网上商店:Iledebeaute
2019/01/03 全球购物
Nixon手表英国官网:美国尼克松手表品牌
2020/02/10 全球购物
本科生个人求职自荐信
2013/09/26 职场文书
最新自我评价范文
2013/11/16 职场文书
心理学专业大学生职业生涯规划范文
2014/02/19 职场文书
公司晚会主持词
2014/03/22 职场文书
党的群众路线教育实践活动个人对照检查材料(乡镇)
2014/11/05 职场文书
2015年助理政工师工作总结
2015/05/26 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书
mybatis 解决从列名到属性名的自动映射失败问题
2021/06/30 Java/Android
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫