Numpy基础

本文介绍NumPy库的基础知识,包括N维数组对象(ndarray)的创建、数据类型管理、数组切片、数学与统计方法、排序及线性代数运算等。此外还介绍了随机数生成方法及一些实用函数。

高性能计算和数据分析的基础包


import numpy as np

N维数组对象(ndarray): 同构数据多维容器。

每个数组都有一个shape(表示维度大小的元组)、dtype(说明数据类型的对象)。

创建ndarray

  • array
  • asarray
  • arange
  • ones、ones_like
  • zeros、zeros_like
  • empty、empty_like
  • eye、identity

ndarray的数据类型dtype

可以通过ndarray的astype方法显式地转换其dtype.

注:调用astype无论如何都会创建出一个新的数组,拷贝。即使新dtype跟以前地一样!

数组切片

注:数组切片是原始数组地视图,意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上! 如果想要副本,arr[5:8].copy()

注:通过布尔型索引选取数组中的数据,将总是创建数据的副本,同astype

跟列表不同的是,当你将标量值赋值给一个切片时,该值会自动传播到整个选区(广播),列表不可以。

In [1]: import numpy as np

In [2]: a = range(10)

In [3]: arr = np.arange(10)

In [4]: a
Out[4]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

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

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

In [7]: a[5:8]
Out[7]: [5, 6, 7]

In [8]: arr[5:8] = 12

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

In [10]: a[5:8] = 12
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-10-cf374f61a718> in <module>()
----> 1 a[5:8] = 12

TypeError: can only assign an iterable

切片是沿着一个轴向选取元素的,所以对于高维数组,可以一次传入多个切片,就像传入多个索引那样。

花式索引(Fancy indexing)

使用整数数组进行索引。

注:花式索引跟切片不一样,它总是将数据复制到新数组中。

In [1]: import numpy as np

In [2]: arr = np.arange(32).reshape((8,4))

In [3]: arr
Out[3]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23],
       [24, 25, 26, 27],
       [28, 29, 30, 31]])

In [4]: arr[[4,3,0,6]]
Out[4]:
array([[16, 17, 18, 19],
       [12, 13, 14, 15],
       [ 0,  1,  2,  3],
       [24, 25, 26, 27]])

In [5]: arr[[4,3,0,6],[0,3,1,2]]
Out[5]: array([16, 15,  1, 26])

In [6]: arr[[4,3,0,6]][:,[0,3,1,2]]
Out[6]:
array([[16, 19, 17, 18],
       [12, 15, 13, 14],
       [ 0,  3,  1,  2],
       [24, 27, 25, 26]])

In [7]: arr[np.ix_([4,3,0,6],[0,3,1,2])]
Out[7]:
array([[16, 19, 17, 18],
       [12, 15, 13, 14],
       [ 0,  3,  1,  2],
       [24, 27, 25, 26]])

数学和统计方法

方法说明
sum对数组中全部或轴向的元素求和(零长度为0)
mean算术平均数(零长度为NaN)
std标准差
var方差
min最小值
max最大值
argmin最小元素的索引
argmax最大元素的索引
cumsum所有元素的累计和
cumprod所有元素的累计积

这类函数可以接受一个axis参数(用于计算该轴向上的统计值),最终结果是一个少一维的数组。 axis沿着某个轴:

轴0 :++‘列’++ 每行是一个向量

轴1 :++‘行’++ 每列是一个向量

看出规律了吗?不是是一会按列求和,一会按行求和,这么简单的!sum(axis=那个维) 那个维就消失,其他维不变,对消失的维求和

In [1]: import numpy as np

In [2]: a = np.array([[1,2], [3,4]])

In [3]: a
Out[3]:
array([[1, 2],
       [3, 4]])

In [4]: type(a)
Out[4]: numpy.ndarray

In [5]: a.shape
Out[5]: (2L, 2L)

In [6]: sum0 = np.sum(a, axis = 0)

In [7]: sum0
Out[7]: array([4, 6])

In [8]: sum1 = np.sum(a, axis = 1)

In [9]: sum1
Out[9]: array([3, 7])

排序

就地排序

ndarray.sort()

多维数组可以在任何一个轴上进行排序,只需将轴编号传给sort即可。

注: 顶级方法np.sort返回的是数组的已排序副本!而就地排序则会修改数组本身。

唯一化

np.unique(arr) 找出数组中的唯一值并返回已排序结果。

等同于

sorted(set(arr))

numpy中的集合函数

方法说明
unique(x)计算x中的唯一元素,并返回有序结果
intersect1d(x,y)计算x和y中的公共元素,并返回有序结果
union1d(x,y)计算x和y的并集,并返回有序结果
in1d(x,y)得到一个表示“x的元素是否包含于y”的布尔型数组
setdiff1d(x,y)集合的差,即元素在x中且不在y中
setxor1d(x,y)集合的对称差,即存在于一个数组中但不同时存在于两个数组中的元素。(异或)
>>> values = np.array([6,0,0,3,2,5,6])
>>> np.in1d(values, [2,3,6])

array([True, False, False, True, True, False, True], dtype=bool)

线性代数

常用的numpy.linalg函数

函数说明
diag以一维数组的形式返回方阵的对角线元素
dot矩阵乘法
trace计算对角线元素的和
det计算矩阵行列式
eig计算方阵的本征值和本征向量
inv计算方阵的逆
pinv计算矩阵的Moore-Penrose伪逆
qr计算QR分解
svd计算奇异值分解(SVD)
solve解线性方程组Ax=b,其中A为一个方阵
lstsq计算Ax=b的最小二乘解

随机数生成

比Python内置的random模块快。

部分 numpy.random 函数

函数说明
seed确定随机数生成器的种子
permutation返回一个序列的随机排列 或 返回一个随机排列的范围
shuffle对一个序列就地随机排列
rand产生均匀分布的样本值
randint从给定的上下限范围内随机选取整数
randn产生正态分布(平均值为0, 标准差为1)的样本值
binomial产生二项分布的样本值
normal产生正态(高斯)分布的样本值 可指定均值和标准差
beta产生Beta分布的样本值
chisquare产生卡方分布的样本值
gamma产生Gamma分布的样本值
uniform产生在[0,1)中均匀分布的样本值

参考《Python for Data Analysis》

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值