1.Numpy是什么?

NumPy(Numerical Python的缩写)是一个开源的Python科学计算库。使用NumPy,就可以很自然地使用数组和矩阵。 NumPy包含很多实用的数学函数,涵盖线性代数运算、傅里叶变换和随机数生成等功能。

这个库的前身是1995年就开始开发的一个用于数组运算的库。经过了长时间的发展,基本上成了绝大部分Python科学计算的基础包,当然也包括所有提供Python接口的深度学习框架。

2.为什么使用Numpy?

a)便捷:

对于同样的数值计算任务,使用NumPy要比直接编写Python代码便捷得多。这是因为NumPy能够直接对数组和矩阵进行操作,可以省略很多循环语句,其众多的数学函数也会让编写代码的工作轻松许多。

b)性能:

NumPy中数组的存储效率和输入输出性能均远远优于Python中等价的基本数据结构(如嵌套的list容器)。其能够提升的性能是与数组中元素的数目成比例的。对于大型数组的运算,使用NumPy的确很有优势。对于TB级的大文件,NumPy使用内存映射文件来处理,以达到最优的数据读写性能。

c)高效:

NumPy的大部分代码都是用C语言写成的,这使得NumPy比纯Python代码高效得多。

当然,NumPy也有其不足之处,由于NumPy使用内存映射文件以达到最优的数据读写性能,而内存的大小限制了其对TB级大文件的处理;此外,NumPy数组的通用性不及Python提供的list容器。因此,在科学计算之外的领域,NumPy的优势也就不那么明显。

3.Numpy的安装:

pip 安装:pip install numpy。

LFD安装:针对windows用户http://www.lfd.uci.edu/~gohlke/pythonlibs/。

Anaconda安装(推荐):Anaconda里面集成了很多关于python科学计算的第三方库,主要是安装方便。下载地址:https://www.anaconda.com/download/。

4.numpy 基础:

NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型。在NumPy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。NumPy的数组类被称作 ndarray(矩阵也叫数组 。通常被称作数组。

常用的ndarray对象属性有:

ndarray.ndim(数组轴的个数,轴的个数被称作秩),

ndarray.shape(数组的维度。这是一个指示数组在每个维度上大小的整数元组。例如一个n行m列的矩阵,它的shape属性将是(2,3),这个元组的长度显然是秩,即维度或者ndim属性),

ndarray.size(数组元素的总个数,等于shape属性中元组元素的乘积),

ndarray.dtype(一个用来描述数组中元素类型的对象,可以通过创造或指定dtype使用标准Python类型。另外NumPy提供它自己的数据类型)。

Numpy的数据类型:

import numpy as np

a = np.dtype(np.int_) # np.int64, np.float32 …

print(a)

Numpy内置的特征码:

int8, int16, int32,int64 可以由字符串’i1’, ‘i2’,’i4’, ‘i8’代替,其余的以此类推。

import numpy as np

a = np.dtype(‘i8’) # ’f8’, ‘i4’’c16’,’a30’(30个字符的字

# 符串), ‘>i4’…

print (a)

可以指明数据类型在内存中的字节序,’>’表示按大端的方式存储,’

5.创建数组并查看其属性:

(1) 用np.array从python列表和元组创建数组:

import numpy as np

a = np.array([[1,2,3], [4, 5, 6]], dtype=int)

print(a.shape) # a.ndim, a.size, a.dtype

import numpy as np

a = np.array([(1,2,3), (4, 5, 6)], dtype=float)

print(a.shape) # a.ndim, a.size, a.dtype

(2) 用np.arange().reshape()创建数组:

import numpy as np

a = np.arange(10).reshape(2, 5) # 创建2行5列的二维数组,

# 也可以创建三维数组,

# a = np.arange(12).reshape(2,3,2)

print(a)

判断下列三维数组的shape:

a = np.array([[[1,2,3], [4, 5, 6], [7, 8, 9]]])

b = np.array([[[1,2,3]], [[4, 5, 6]], [[7, 8, 9]]])

6.基本运算:

import numpy as np

a = np.random.random(6)

b = np.random.rand(6)

c = np.random.randn(6)

print(a-b) # print(a+b),print(a*c) …

# 二维数组运算

d = np.random.random((2,3))

e = np.random.randn(2, 3)

f = np.random.rand(2,3)

print(d-e) # print(d+f),print(e*f) …

print(np.dot(a,b)) #复习矩阵乘法

print(a.dot(b))

# Numpy 随机数模块np.random.random, np.random.randn, np.random.rand的比较

(1)rand 生成均匀分布的伪随机数。分布在(0~1)之间

(2)randn 生成标准正态分布的伪随机数(均值为0,方差为1)。

import numpy as np

a = np.ones((2,3))

b = np.zeros((2,3))

a*=3

b+=a

7.常用函数:

import numpy as np

a = np.arange(10)

np.where()

8.索引,切片和迭代:

import numpy as np

a = arange(10)**3

a[2]

a[2:5]

a[:6:2] = -1000

a[ : :-1]

for i in a:

print i**(1/3.)

# 多维数组的索引

b = np.arange(20).reshape(5,4)

b[2,3]

b[0:5, 1]

b[ : ,1]

b[1:3, : ]

#当少于轴数的索引被提供时,确失的索引被认为是整个切片

b[-1] #相当于b[-1,:]

# b[i] 中括号中的表达式被当作 i 和一系列 : ,来代表剩下的轴。NumPy也允许你使用“点”像 b[i,...] 。

#点 (…)代表许多产生一个完整的索引元组必要的分号。如果x是

#秩为5的数组(即它有5个轴),那么:x[1,2,…] 等同于 x[1,2,:,:,:],x[…,3] 等同于 x[:,:,:,:,3],x[4,…,5,:] 等同 x[4,:,:,5,:].

三维数组的索引:

c = np.arange(12).reshape(2,3,2)

c[1]

c[2,1] # 等价于c[2][1]

c[2,1,1] # 等价于c[2][1][1]

# 通过数组索引

d = np.arange(10)**2

e = np.array ([3, 5, 6])

d[e] = ?

#练习, 用同样的方法在二维数组中操作。

# 通过布尔数组索引

f = np.arange(12).reshape(3, 4)

g = f>4

print(g)

f [g]

迭代多维数组是就第一个轴而言的:

h = np.arange(12).reshape(3,4)

for i in h:

print(i)

如果想对每个数组中元素进行运算,我们可以使用flat属性,该属性是数组元素的一个迭代器:

for i in h.flat:

print(i)

补充:flatten()的用法:

np.flatten()返回一个折叠成一维的数组。但是该函数只能适用于numpy对象,即array或者mat,普通的list列表是不行的。

import numpy as np

a = np.array([[1,2], [3, 4], [5, 6]])

a.flatten()

b = np.mat([[1,2,3], [4, 5, 6]])

b.flatten()

c = [[1,2,3], [4, 5, 6]]

c.flatten() ?

想要list达到同样的效果可以使用列表表达式:

[y for x in a for y in x]

9. 形状操作:

ravel(),vstack(),hstack(),column_stack,row_stack, stack, split, hsplit, vsplit

import numpy as np

#增加维度

a = np.arange(5)

a[:, np.newaxis]

a[np.newaxis, :]

np.tile([1,2], 2)

#合并

a = np.arange(10).reshape(2,5)

print(a.ravel())

print(a.resize(5,2))

b = np.arange(6).reshape(2,3)

c = np.ones((2,3))

d = np.hstack((b,c)) # hstack:horizontal stack 左右合并

e = np.vstack((b,c)) # vstack: vertical stack 上下合并

f = np.column_stack((b,c))

g = np.row_stack((b,c))

h = np.stack((b, c), axis=1) # 按行合并

i = np.stack((b,c), axis=0) # 按列合并

j = np.concatenate ((b, c, c, b), axis=0) #多个合并

#分割

k = np.hsplit(i, 2)

l = np.vsplit(i, 2)

m = np.split(i, 2, axis=0)

n = np.split(i, 2,axis=1)

o = np.array_split(np.arange(10),3) #不等量分割

10.深拷贝:

import numpy as np

a = np.arange (4)

b = a

c = a

d = b

a[0]=10 a = ? b = ? c= ? d = ?

b = a.copy()

a [0] = 9

b = ?

11.广播 Broadcasting

广播是一种强有力的机制,它让Numpy可以让不同大小的矩阵在一起进行数学计算。我们常常会有一个小的矩阵和一个大的矩阵,然后我们会需要用小的矩阵对大的矩阵做一些计算。

把一个向量加到矩阵的每一行:

import numpy as np

a = np.array ([[1,2,3], [4,5,6], [7,8,9]])

b = np.array ([10,10,10])

c = np.tile(b, (4,1))

d = a + c

#用广播机制:

c = a + b

对两个数组使用广播机制要遵守下列规则:

如果数组的秩不同,使用1来将秩较小的数组进行扩展,直到两个数组的尺寸的长度都一样。

如果两个数组在某个维度上的长度是一样的,或者其中一个数组在该维度上长度为1,那么我们就说这两个数组在该维度上是相容的。

如果两个数组在所有维度上都是相容的,他们就能使用广播。

如果两个输入数组的尺寸不同,那么注意其中较大的那个尺寸。因为广播之后,两个数组的尺寸将和那个较大的尺寸一样。

在任何一个维度上,如果一个数组的长度为1,另一个数组长度大于1,那么在该维度上,就好像是对第一个数组进行了复制。

以上就是关于python中numpy库的相关知识了,希望对大家有所帮助。

python中的numpy库有什么优缺点_python中关于numpy库的介绍相关推荐

  1. python 获取行列号两个数组相等_python – 寻找在numpy中找到两个相等长度数组之间精确重叠的最快方法...

    我正在寻找最佳(最快)的方法来找到numpy中两个数组之间的确切重叠.给定两个数组x和y x = array([1,0,3,0,5,0,7,4],dtype=int) y = array([1,4,0 ...

  2. python调用so库输出传入指针_python中使用ctypes调用so传参设置遇到的问题及解决方法...

    问题 近日在做一组声纹聚类时,使用了另一团队同学开发的声纹距离算法.该算法对外提供的是一组so包,需要使用方自己去使用.在python中调用纯so包一般使用ctypes类库,用起来看起来简单但也有不少 ...

  3. python代码风格程序越复杂越高级_Python中代码风格的改变和相应的性能优化

    使用现代风格改善你的代码 一旦你开始使用 Python 3,你就有机会接触新的特性来改善你的代码.这篇文章中提到的很多东西实际上在 Python 3 之前就已经被支持了.但我还是要提一下它们,因为知道 ...

  4. python安装扩展库常用的命令_Python环境——安装扩展库

    一.修改easy_install源 在操作用户家目录添加一个文件 cat >> ~/.pydistutils.cfg < [easy_install] index-url = htt ...

  5. python调用r语言加载包错误_Python中调用R语言包指南.docx

    Python中调用R语言包指南R语言是非常强大的做统计分析和建模方面的开源软件,它有非常丰富的统计软件包,做统计可以说只有你想不到的,没有R办不到的.Python又是当下最流行的编程软件之一,Pyth ...

  6. python turtle库画七彩蟒蛇_Python学习之turtle库和蟒蛇绘制程序

    Python的函数库 Python语言与C语言Java类似,可以大量使用外部函数库包含在安装包中的函数库:. 比如math, random, turtle等其他函数库,其他函数库用户根据代码需求自行安 ...

  7. python连续两个冒号是什么成语_python中双冒号

    1.字符串转义序列转义字符 描述(在行尾时) 续行符\ 反斜杠符号' 单引号" 双引号a 响铃b 退格(Backspace)e 转义000 空n 换行v 纵向制表符t 横向制表符r 回车f ...

  8. python中变量的作用域有几种_Python中变量的作用域(variable scope)

    http://www.crifan.com/summary_python_variable_effective_scope/ 解释python中变量的作用域 示例: 1.代码版 #!/usr/bin/ ...

  9. python中选择结构通过什么语句实现_Python中选择结构通过什么语句实现

    Python中选择结构通过什么语句实现 Python中的选择结构语句是 if elif else. Python用缩进代替了Java/C/C++/C#中常用的大括号{}来区分代码块,另外Python在 ...

最新文章

  1. Leangoo项目管理软件管理 传统硬件产品开发全流程
  2. MySQL共有data和redo的后果
  3. nagios使用check_mysql监控mysql
  4. TCP三次握手连接及seq和ack号的正确理解
  5. Python黑科技:在家远程遥控公司电脑,python+微信一键连接!
  6. 周志华《机器学习》读书笔记与习题答案(持续更新)
  7. python语言的主网址-Python简介
  8. 计算机专业答辩网站怎么保证安全性,答辩(计算机专业答辩题目选集)
  9. 如何进入百度、阿里,一个6年Android老司机的面经
  10. linux服务器之间的文件同步(双向同步unison+inotify)
  11. 苹果MFI认证步骤汇总
  12. 2020-10-06
  13. 反脆弱:为什么有些人更能适应工作的剧烈变化?
  14. 在 Parallels Desktop 中,全屏模式使用 Win7,唤醒时黑屏
  15. 炒作与现实的博弈,厂商大肆宣传自动驾驶致司机陷入危险
  16. 肝内胆管结石有哪些严重危害?
  17. 如何将onedrive for business扩容为硬盘空间
  18. 浅谈如何进行网站结构优化
  19. 为什么使用kbhit后按下键盘无反应?
  20. 记录大坑:用Xamarin引入UHF读写器dll,报错: 所生成项目的处理器架构“MSIiL”与引用的Reader.dll处理器架构“x86”不匹配

热门文章

  1. 下载并安装Windows 7 系统的步骤
  2. IDEA tomcat中deployment点击+号没有出现artifcat
  3. eds能谱图分析实例_EDS(EDX)- Energy Dispersive X-Ray Spectrometer 能量色散谱仪
  4. C语言实现根据阳历(公历)显示农历,干支,生肖
  5. Java基础 接口实现 设计一个形状类(接口)Shape,方法:求周长和求面积
  6. ubuntu20有线网络无线网络
  7. CheckMarx与SonarQube集成
  8. Django2.1遇到 app_label and isn't in an application in INSTALLED_APPS 错误
  9. 【Rtklib入门指南】1. Rtklib下载及编译
  10. C语言实现小球落地问题