入门numpy(80%-100%)【解读numpy官方文档】

浏览: 3274

前言

这个numpy连载拖了挺久了,今天终于要更新完了!!!之后咱们可视化走起~


ix_()函数

ix_函数可以用于组合不同的向量,以获得每个的结果。 例如,如果要计算从每个向量a,b和c中获取的所有三元组的所有a + b * c:

import numpy as np

a = np.array([2,3,4,5])
b = np.array([8,5,4])
c = np.array([5,4,6,8,3])
ax,bx,cx = np.ix_(a,b,c)
ax

Clipboard Image.png

bx

Clipboard Image.png

cx

Clipboard Image.png

ax.shape, bx.shape, cx.shape

Clipboard Image.png

result = ax+bx*cx
result

Clipboard Image.png

注:通过函数将原来的一维数列组合都变成可以做某种运算的三维数组


Clipboard Image.png

注:两种等效的索引到三位数组的某元素


用字符串进行索引

参阅结构化数组:https://docs.scipy.org/doc/numpy-dev/user/basics.rec.html#structured-arrays

线性代数

基本的线性代数运算

有关更多信息,请参阅numpy文件夹中的linalg.py

import numpy as np
a = np.array([[1.0, 2.0], [3.0, 4.0]])
print(a)

Clipboard Image.png

注:创建一个矩阵a


a.transpose()

Clipboard Image.png

注:求a矩阵的转置


 np.linalg.inv(a)

Clipboard Image.png

注:求a矩阵的逆矩阵


u = np.eye(2)
u

Clipboard Image.png

注:产生二阶单位矩阵


j = np.array([[0.0, -1.0], [1.0, 0.0]])
np.dot (j, j)

Clipboard Image.png

注:矩阵乘法


np.trace(u)

Clipboard Image.png

注:trace轨迹,这里指矩阵的迹,矩阵主对角元素之和


y = np.array([[5.], [7.]])
np.linalg.solve(a, y)

Clipboard Image.png

注:解形如ax=y的线性方程组所得的x


np.linalg.eig(j)

Clipboard Image.png

注:求j矩阵的特征值和特征向量


技巧和提示

这里我们列出一些简短有用的提示。

“自动”整形

要更改数组的尺寸,可以省略其中一个尺寸,然后自动推导出:

a = np.arange(30)
a.shape = 2,-1,3
a.shape

Clipboard Image.png

注:将a数组变形,参数-1表示根据情况自动计算出值


a

Clipboard Image.png

注:打印a矩阵

矢量堆叠

我们如何从同样大小的行向量的列表中构造2维数组? 在MATLAB中,这很简单:如果x和y是相同长度的两个向量,那么只需要m = [x; y]。 

在NumPy中,这可以通过函数column_stack,dstack,hstack和vstack来实现,具体取决于要进行堆叠的维度。

例如:

x = np.arange(0,10,2)             
y = np.arange(5)
m = np.vstack([x,y])
m

Clipboard Image.png

注:vstack意为vertical  stack按照竖直方向堆叠


xy = np.hstack([x,y])
xy

Clipboard Image.png

注:hstack意为horizontal  stack按照竖直方向堆叠


学matlab的学者对照学习numpy参考:

https://docs.scipy.org/doc/numpy-dev/user/numpy-for-matlab-users.html


直方图

应用于数组的NumPy直方图函数返回一对向量:数组的直方图和bins的向量。

注意:matplotlib还具有构建与NumPy不同的直方图(称为hist,如在Matlab中)的功能。 

主要区别在于pylab.hist自动绘制直方图,而numpy.histogram仅生成数据。


import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# Build a vector of 10000 normal deviates with variance 0.5^2 and mean 2
mu, sigma = 2, 0.5
v = np.random.normal(mu,sigma,10000)
# Plot a normalized histogram with 50 bins
plt.hist(v, bins=50, normed=1) # matplotlib version (plot)
plt.show()

Clipboard Image.png

注:这是matplotlib的hist方法画直方图,随机产生正态分布(均值为2,标准差为0.5)数据,然后画图


注意:加上%matplotlib inline 可以使图画在jupyter notebook中,而不是单独弹窗出一幅图(感谢秦路老师当时为我解答这个困惑)


(n, bins) = np.histogram(v, bins=50, normed=True)  # NumPy version (no plot)
plt.plot(.5*(bins[1:]+bins[:-1]), n)
plt.show()

Clipboard Image.png

注:numpy中的histogram方法生成数据,然后使用matplotlib的plot方法画图

推荐 5
本文由 ID王大伟 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

2 个评论

最后这个画图的部分有详细的讲解吗博主?
如果对绘图感兴趣 建议去看matplotlib的官方文档哦

要回复文章请先登录注册