Numpy基础:数组和矢量计算

ndarray:多维数组对象

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

1.创建ndarray

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

import numpy as np

data1 = [6,7.5,8,0,1]

arr1 = np.array(data1)

arr1
Out[4]: array([ 6. ,  7.5,  8. ,  0. ,  1. ])

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

arr1.shape
Out[5]: (5L,)

arr1.dtype
Out[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])

arr
Out[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)

arr
Out[20]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

arr[5:8]
Out[21]: array([5, 6, 7])

arr[5:8]=12

arr
Out[23]: array([ 0,  1,  2,  3,  4, 12, 12, 12,  8,  9])

arr_slice = arr[5:8]

arr_slice[1]=123

arr
Out[26]: array([  0,   1,   2,   3,   4,  12, 123,  12,   8,   9])

arr_slice[:]=64

arr
Out[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)

result
Out[7]: array([ 1.1,  2.2,  1.3])

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

arr = np.random.randn(3,3)

arr
Out[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)

arr
Out[20]: array([-1.35004544,  0.83532214,  1.01864971,  0.60209129,  0.18729369])

arr.sort()

arr
Out[22]: array([-1.35004544,  0.18729369,  0.60209129,  0.83532214,  1.01864971])

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

arr = np.random.randn(4,3)

arr
Out[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)

arr
Out[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. 随机数生成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值