Python的numpy摘要

作者:, 发表于

numpy是python的(事实)标准矩阵库,很多其它库(比如pandas, sklearn)都以numpy为数值处理对象,因此也是其它库的基础。

1.属性

arr.shape # 等价于matlab的size(arr)
arr.dtype # 元素的类型,一般有np.float64, np.int64, np.bool这种

2.创建

arr = np.array([1, 2, 3, 4] # list -> ndarray
arr.tolist() # 变回list
np.array([[1, 2, 3, 4], [5, 6, 7, 8])
np.zeros(10) # 注意和matlab的差异,这里是创建10*1的向量
np.ones((10, 10))
np.ones_like(arr) # = np.ones(arr.shape)
np.eye(10) # 单位矩阵
np.empty(arr.shape) # empty不是0,而是未经初始化的值
np.random.normal(size=(4,4)) # 还有 rand, uniform, randn, binomial, beta等一系列随机数生成函数
np.range(10) # = [0, 1, 2, ..., 9]
np.range(5, 10) # = [5, 6, 7, 8, 9]
float_arr = arr.astype(np.float64) # convert to float array (from int, maybe)
(x, y) = np.meshgrid(x_points, y_points) # 创建二维网格

3.连接/变形

arr.reshape([2, 4])
np.r_[a1, a2] # 类似于matlab的[a1; a2]
np.c_[a1, a2] # 类似于matlab的[a1, a2]
np.array([1, 2, 3]).repeat(3) # = [1, 1, 1, 2, 2, 2, 3, 3, 3]
np.array([1, 2, 3]).repeat([1, 2, 3]) # = [1, 2, 2, 3, 3, 3]
arr.repeat([1, 2, 3], axis = 1)
np.tile(arr, (2, 2))
arr.ravel() # 多维展开成1维,相当于Matlab的arr(:)
arr.flatten() # 同revel(),不过返回新副本

4.文件存取

np.save("a", arr)
np.load("a.npy")
np.loadtxt("a.txt", delimiter=',')
np.savetxt("a.txt", arr)

5.计算

arr * 10
arr1 * arr2 # 注意python没有matlab里的.*等运算符,因此python里的*号即matlab里的.*,都是元素对应相乘

6.数据切片

arr[5] # 注意索引从0开始
arr[5:8] # 注意和matlab不同,5:8不包含8
arr[5:8] = 12
a = arr[5:8]; a[1] = 1; # 切片都是原始数据空间,会修改原矩阵的值
arr[5:8].copy() # 如果想要一份复制文件,需显式调用copy函数
arr[5, 8] # arr[5][8]
arr[:2, 1:]
arr[arr == 1] = 2 # 索引可以是bool型,
a = arr[arr == 1], a[1] = 1 # 但注意,此时将创建结果数据的副本,因此不会修改原数组的值
arr[[1,2,34],[5,6,7,8]] # 注意返回的是一个长为向量,而不是一个4*4的数组,= [arr[1,5],arr[2,6],arr[3,7],arr[4,8]]
arr[[1,2,34]][:, [5,6,7,8]] # matlab的对应

7.转置/转换

arr.T # 不会复制数据

8.元素计算函数

np.abs, np.fabs
np.sqrt, np.square
np.exp, np.log, np.log2
np.sign, np.ceil, np.floor, np.rint, np.modf
np.isnan, np.isfinite, np.isinf
res = np.where(cond, xarr, yarr) # 对每个位置执行 res = xarr if cond else yarr

9.数学和统计方法

arr.mean(),  np.mean(arr)
arr.sum(), arr.sum(axis=1)
arr.cumsum(), arr.cumprod()
arr.min(), arr.max()
arr.std(), arr.var()
arr.argmin(), arr.argmax()
arr.any(), arr.all() # bool矩阵

10.线性代数

线性代数算法在np.linalg里。有 diag, trace, det, eig, inv, pinv, qr, svd, solve, lstsq

x.dot(y) = np.dot(x, y) # matlab里的 x * y. python里的*号对应matlab的.*
np.linalg.inv(arr)

11.排序

arr.sort(axis=0) # inplace
arr = np.sort(arr) # 生成副本
arr.unique() # 返回有序去重结果
np.intersect1d(x, y) # 公共元素
np.setdiff1d(x, y), np.setxor1d(x, y)
np.union1d(x, y) # 并集
np.in1d(arr, [1, 2, 3, 4, 5] = [true if x in [1, 2, 3, 4, 5] else false for x in arr]

Q.E.D.


上一篇:ubuntu安装armadillo2016年11月8日
armadillo是一个线性代数C++库,封装了blas和lapack,提供更直观的接口。 安装依赖项 sudo apt-get install libopenblas-dev liblapack-dev 下载 wget http://sourceforge.n

下一篇:Python的sklearn库摘要2017年2月14日
线性回归 Ridge回归(也包括普通回归) 优化目标: \[ \frac{1}{2 n_samples}  ||y - Xw||^2_2 + \alpha  ||w||_2^2 \] from sklearn import linear_model reg = linear_model


  • 支持使用微薄、微信和QQ的账户登陆进行评论。由各自网站直接认证,不会泄露你的密码。
  • 登陆后可选择分享评论到所绑定的社交网络,如微薄、人人和QQ空间。
  • 评论提交后无法修改。如需修改,请删除原评论再重新提交。
  • 评论支持LaTeX代码,行内公式请用\(a+b=c\),行间公式请用\[a+b=c\]。公式只支持英文字符。