Numpy基础:数组和矢量计算

来源:互联网 发布:卡在windows启动界面 编辑:程序博客网 时间:2024/05/16 15:34

ndarray:多维数组对象

以下内容参考书《利用Python进行数据分析》。
numpy 官方的学习文档
https://docs.scipy.org/doc/numpy-dev/user/quickstart.html

1.创建ndarray

创建数组最简单的方法是使用array 函数。它接受一切序列型的对象。

import numpy as npdata1 = [6,7.5,8,0,1]arr1 = np.array(data1)arr1Out[4]: array([ 6. ,  7.5,  8. ,  0. ,  1. ])

每一个数组都有一个 shape 和一个 dtype

arr1.shapeOut[5]: (5L,)arr1.dtypeOut[6]: dtype('float64')

zeros 和函数 ones 创建指定 长度或形状的全0全1数组。empty创建没有任何具体值的数组

np.zeros(7)Out[9]: array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.])np.ones((2,3))Out[10]: array([[ 1.,  1.,  1.],       [ 1.,  1.,  1.]])np.empty((2,3))Out[11]: array([[ 0.,  0.,  0.],       [ 0.,  0.,  0.]])

2.数据类型转换

astype
整数转为浮点数时,小数部分会被截断

arr = np.array([3.7,-1.2,-2.6,0.5])arrOut[14]: array([ 3.7, -1.2, -2.6,  0.5])arr.astype(np.int32)Out[15]: array([ 3, -1, -2,  0])

某字符串数组表示的全是数字也可以用astype转换

num_str = np.array(['1.25','-3.6','24'],dtype = np.string_)num_str.astype(float)Out[18]: array([  1.25,  -3.6 ,  24.  ])

3.数组和标量之间的运算

大小相等的数组间的任何算术运算都会将运算应用到元素级

4.索引和切片

索引:选取数组的子集或单个元素
下标从0开始,左闭右开

arr = np.arange(10)arrOut[20]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])arr[5:8]Out[21]: array([5, 6, 7])arr[5:8]=12arrOut[23]: array([ 0,  1,  2,  3,  4, 12, 12, 12,  8,  9])arr_slice = arr[5:8]arr_slice[1]=123arrOut[26]: array([  0,   1,   2,   3,   4,  12, 123,  12,   8,   9])arr_slice[:]=64arrOut[28]: array([ 0,  1,  2,  3,  4, 64, 64, 64,  8,  9])

5.数组的转置和轴对换

计算矩阵内积

arr = np.random.randn(6,3)np.dot(arr.T,arr)Out[30]: array([[ 8.46291352, -6.53225698, -0.56153338],       [-6.53225698,  9.06106344,  2.52970761],       [-0.56153338,  2.52970761,  5.57303457]])

6.通用函数

通用函数是一种对ndarray中的数据执行元素级运算的函数
square: 计算各元素的平方
sign:计算元素的正负号
ceil:大于等于该值的最小整数
floor:小于等于该值的最大整数
rint: 四舍五入,保留dtype
modf:将数组以小数部分和整数部分两个独立的数组形式返回

7.将条件逻辑表述为数组运算

numpy.where 函数
两个值数组和一个布尔数组

xarr = np.array([1.1,1.2,1.3])yarr = np.array([2.1,2.2,2.3])cond = np.array([True,False,True)]
cond = np.array([True,False,True])result = np.where(cond,xarr,yarr)resultOut[7]: array([ 1.1,  2.2,  1.3])

将随机数组的正值替换为2

arr = np.random.randn(3,3)arrOut[13]: array([[-0.66787606,  0.94647356, -0.50731958],       [ 1.09635393, -0.24440493,  0.33180244],       [ 0.11577465, -0.36681824,  0.87039169]])np.where(arr > 0,2,arr)Out[14]: array([[-0.66787606,  2.        , -0.50731958],       [ 2.        , -0.24440493,  2.        ],       [ 2.        , -0.36681824,  2.        ]])

8.排序

arr = np.random.randn(5)arrOut[20]: array([-1.35004544,  0.83532214,  1.01864971,  0.60209129,  0.18729369])arr.sort()arrOut[22]: array([-1.35004544,  0.18729369,  0.60209129,  0.83532214,  1.01864971])

多维数组可以对某一维进行排序,只需要将轴编号传给sort即可

arr = np.random.randn(4,3)arrOut[28]: array([[ 1.65426166,  0.72345798,  0.54172487],       [ 0.42299115,  0.26661342,  0.44222104],       [ 0.62432732,  0.6765546 , -0.95483994],       [ 1.25453269, -0.15451337, -0.31239763]])arr.sort(1)arrOut[30]: array([[ 0.54172487,  0.72345798,  1.65426166],       [ 0.26661342,  0.42299115,  0.44222104],       [-0.95483994,  0.62432732,  0.6765546 ],       [-0.31239763, -0.15451337,  1.25453269]])

9.数组的集合运算

unique(x) 计算x中的唯一元素,并返回有序结果
intersect1d(x,y) 计算x和y中的公共元素,并返回有序结果
union1d(x,y) 计算x和y的并集,并返回有序的结果

ints = np.array([1,1,1,2,3,4,4,3])np.unique(ints)Out[32]: array([1, 2, 3, 4])

10.线性代数

常用的numpy.linalg 函数、
diag 对角线元素
dot 矩阵乘法
trace 计算对角线元素的和
det 计算行列式
eig 方阵的特征值和特征向量
inv 方阵的逆
qr QR分解
svd 奇异值分解
lstsq 计算Ax=b 的最小二乘解

11. 随机数生成

原创粉丝点击