numpy 常用操作

来源:互联网 发布:手机淘宝差评改好评 编辑:程序博客网 时间:2024/05/16 06:02

numpy提供了ndarray和matrix两种类型的数据,为我们进行科学运算提供了非常便捷的运算工具。相对来说,我觉得其实还是MATLAB对于矩阵运算的支持更加直观易操作,但是作为Python使用者,怎能不把numpy用熟用透呢。

在numpy中,同样一种操作可能提供了很多种不同的方式,具体怎么来实现完全是使用者个人习惯。对于和我一样的菜鸟,我觉得最好是从一开始就养成较好的操作习惯。

numpy的二维数组能够很好地实现矩阵的各种功能,而且比matrix要灵活,速度也更快(refer:numpy教程:矩阵matrix及其运算)。因此,在二者通用的情况下,我选择使用array来实现。

下面的内容主要是学习了numpy的教程之后,结合我自己在平时的使用中可能经常遇到的一些操作问题做一下总结,方便自己记住。一些比较少用的操作就先不管了,就算忘了再去查就好了。

numpy官方教程: https://docs.scipy.org/doc/numpy-dev/user/quickstart.html
numpy官方教程中文翻译: NumPy的详细教程

1. 创建数组和数组变形

import numpy as np
# 创建数组a = np.array([1,2,3,4,5,6])print a# 直接给a.shape赋值是最简单的变形方式a.shape = (2,3)print '变形之后:'print a
[1 2 3 4 5 6][[1 2 3] [4 5 6]]
a.ravel() # 拉直数组
array([1, 2, 3, 4, 5, 6])

2.数组拼接

A = np.floor(np.random.randn(2,3) * 10)print 'A:\n', AB = np.floor(np.random.randn(2,3) * 10)print 'B:\n', B
A:[[ -2.   3. -10.] [  5.   4.   7.]]B:[[-14.  -7.   3.] [ 10.   6.  -8.]]
# 按第一个轴拼接print '按行拼接:'print np.vstack([A,B])# 按第二个轴拼接print '按列拼接:'print np.hstack([A,B])
按行拼接:[[ -2.   3. -10.] [  5.   4.   7.] [-14.  -7.   3.] [ 10.   6.  -8.]]按列拼接:[[ -2.   3. -10. -14.  -7.   3.] [  5.   4.   7.  10.   6.  -8.]]

3. 基本操作和基本运算

np.exp(2)
7.3890560989306504
np.exp2(2)
4.0
np.sqrt(4)
2.0
np.sin([2,3])
array([ 0.90929743,  0.14112001])
np.log(2)
0.69314718055994529
np.log10(2)
0.3010299956639812
np.log2(2)
1.0
np.max([1,2,3,4])
4

4.二维数组完成矩阵操作

A = np.array([[1, 2], [-1, 4]])B = np.array([[2, 0], [3, 4]])print '对应元素想乘:'print A * Bprint '矩阵乘法:'print np.dot(A, B) # 或者 A.dot(B)
对应元素想乘:[[ 2  0] [-3 16]]矩阵乘法[[ 8  8] [10 16]]
# 线性代数from numpy import linalg
# 求A的转置print 'A的转置:'print A.transpose()# 求A的逆矩阵print 'A的逆矩阵:'print linalg.inv(A)# 特征值和特征向量eigenvalues, eigenvectors = linalg.eig(A)print 'A 的特征值:'print eigenvalues # 特征值print 'A 的特征向量:'print eigenvectors # 特征向量
A的转置:[[ 1 -1] [ 2  4]]A的逆矩阵:[[ 0.66666667 -0.33333333] [ 0.16666667  0.16666667]]A 的特征值:[ 2.  3.]A 的特征向量:[[-0.89442719 -0.70710678] [-0.4472136  -0.70710678]]
0 0