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实现爬虫统计学校BBS男女比例之多线程爬虫(二)
Dec 31 Python
用Python写冒泡排序代码
Apr 12 Python
解决Django migrate No changes detected 不能创建表的问题
May 27 Python
Python hashlib模块用法实例分析
Jun 12 Python
python单线程文件传输的实例(C/S)
Feb 13 Python
python time.sleep()是睡眠线程还是进程
Jul 09 Python
深入了解Python枚举类型的相关知识
Jul 09 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
Oct 24 Python
python计算n的阶乘的方法代码
Oct 25 Python
Python获取、格式化当前时间日期的方法
Feb 10 Python
python 比较字典value的最大值的几种方法
Apr 17 Python
Python爬虫开发与项目实战
Dec 16 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
2019十大人气国漫
2020/03/13 国漫
笑谈配置,使用Smarty技术
2007/01/04 PHP
php文档更新介绍
2011/07/22 PHP
PHP判断密码强度的方法详解
2017/05/26 PHP
php解压缩zip和rar压缩包文件的方法
2019/07/10 PHP
使用Laravel中的查询构造器实现增删改查功能
2019/09/03 PHP
用js模拟JQuery的show与hide动画函数代码
2010/09/20 Javascript
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
JavaScript中关于class的调用方法
2017/11/28 Javascript
动手写一个angular版本的Message组件的方法
2017/12/16 Javascript
详解angular如何调用HTML字符串的方法
2018/06/30 Javascript
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
深入浅析javascript函数中with
2018/10/28 Javascript
使用nvm和nrm优化node.js工作流的方法
2019/01/17 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
Javascript Worker子线程代码实例
2020/02/20 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
jQuery实现动态向上滚动
2020/12/21 jQuery
[01:08:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS LGD-CDEC
2014/05/22 DOTA
从零学Python之入门(五)缩进和选择
2014/05/27 Python
python概率计算器实例分析
2015/03/25 Python
ubuntu系统下使用pm2设置nodejs开机自启动的方法
2018/05/12 NodeJs
美体小铺加拿大官方网站:The Body Shop加拿大
2016/10/30 全球购物
校长先进事迹材料
2014/02/01 职场文书
法律进社区实施方案
2014/03/21 职场文书
争先创优活动总结
2014/08/27 职场文书
试用期辞职信范文
2015/03/02 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
导游词之云南丽江古城
2019/09/17 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
基于Go Int转string几种方式性能测试
2021/04/28 Golang
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS