numpy
2016-08-31 16:45:34 0 举报
AI智能生成
NumPy(Numerical Python的简称)是一个开源的Python科学计算库,用于快速处理任意维度的数组和矩阵。它提供了大量的高级数学函数、线性代数操作、傅里叶变换等功能,广泛应用于数据分析、机器学习、图像处理等领域。NumPy的核心优势在于其高效的多维数组对象和对数组元素的广播机制,使得复杂的数学运算变得简单易用。此外,NumPy还与其他科学计算库如Pandas、Matplotlib等紧密集成,为Python用户提供了丰富的数据处理和可视化工具。总之,NumPy是Python科学计算的基础库,对于从事相关领域的开发者来说具有重要的实用价值。
作者其他创作
大纲/内容
ufunc运算(numpy中的数据函数可以直接应用到pandas的数据框中,
参数可以直接传相应的类型)
参数可以直接传相应的类型)
y = x1 + x2: | add(x1, x2 [, y]) |
y = x1 - x2: | subtract(x1, x2 [, y]) |
y = x1 * x2: | multiply (x1, x2 [, y]) |
y = x1 / x2: | divide (x1, x2 [, y]), 如果两个数组的元素为整数,那么用整数除法 |
y = x1 / x2: | true divide (x1, x2 [, y]), 总是返回精确的商 |
y = x1 // x2: | floor divide (x1, x2 [, y]), 总是对返回值取整 |
y = -x: | negative(x [,y]) |
y = x1**x2: | power(x1, x2 [, y]) |
y = x1 % x2: | remainder(x1, x2 [, y]), mod(x1, x2, [, y]) |
np.add.reduce([1,2,3]) # 1 + 2 + 3
6
>>> np.add.reduce([[1,2,3],[4,5,6]], axis=1) # 1,4 + 2,5 + 3,6
array([ 6, 15])
np.add.accumulate([1,2,3])[ 4, 9, 15]]
array([1, 3, 6])
>>> np.add.accumulate([[1,2,3],[4,5,6]], axis=1)
array([[ 1, 3, 6],
高级切片
A=numpy.array([[10*m+n for n in range(5)]for m in range(5)])
A[[1,2,3],],第1,2,3行
但不能A[[1,2,3],[2,3,4]],这就变成了,第1行第2列,第2行第三列,第三行第四列,共3个数,而不是3*3,9个数
A[[1,2,3],],第1,2,3行
但不能A[[1,2,3],[2,3,4]],这就变成了,第1行第2列,第2行第三列,第三行第四列,共3个数,而不是3*3,9个数
数据类型
array
ndarray
a=np.array([[],[],[]])
a.shape
out:维度值
out:维度值
c
out:
array([[1, 2, 3, 4],
[4, 5, 6, 7],
[7, 8, 9, 10]])
c.shape
out:
(3, 4)
d = c.reshape((2,2))
>>> d
array([[1,2,3,4,4,5],
[6,7,7,8,9,10]])
数组c和d其实共享数据存储内存区域,因此修改其中任意一个数组的元素都会同时修改另外一个数组的内容
某个轴的元素为-1时,将根据数组元素的个数自动计算此轴的长度,因此下面的程序将数组c的shape改为了(2,6):
创建 array
和Python的列表序列不同,通过下标范围获取的新的数组是原始数组的一个视图。它与原始数组共享同一块数据空间
np.arange(0,1,0.1)
array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
np.linspace(0, 1, 12)
array([ 0. , 0.09090909, 0.18181818, 0.27272727, 0.36363636,
0.45454545, 0.54545455, 0.63636364, 0.72727273, 0.81818182,
0.90909091, 1. ])
np.logspace(0, 2, 20) 等比数列
array([ 1. , 1.27427499, 1.62377674, 2.06913808,
2.6366509 , 3.35981829, 4.2813324 , 5.45559478,
6.95192796, 8.8586679 , 11.28837892, 14.38449888,
18.32980711, 23.35721469, 29.76351442, 37.92690191,
48.32930239, 61.58482111, 78.47599704, 100. ])
def func(i):
... return i%4+1
...
>>> np.fromfunction(func, (10,))基于某种规则来拼成一个n*n的数组,第一个参数是函数名,第二个参数是数组的纬度
array([ 1., 2., 3., 4., 1., 2., 3., 4., 1., 2.])
fromfunction函数的第一个参数为计算每个数组元素的函数,第二个参数为数组的大小(shape),因为它支持多维数组,所以第二个参数必须是一个序列,本例中用(10,)创建一个10元素的一维数组。
def func2(i, j): ... return (i+1) * (j+1) ... >>> a = np.fromfunction(func2, (9,9)) >>> a array([[ 1., 2., 3., 4., 5., 6., 7., 8., 9.], [ 2., 4., 6., 8., 10., 12., 14., 16., 18.], [ 3., 6., 9., 12., 15., 18., 21., 24., 27.], [ 4., 8., 12., 16., 20., 24., 28., 32., 36.], [ 5., 10., 15., 20., 25., 30., 35., 40., 45.], [ 6., 12., 18., 24., 30., 36., 42., 48., 54.], [ 7., 14., 21., 28., 35., 42., 49., 56., 63.], [ 8., 16., 24., 32., 40., 48., 56., 64., 72.], [ 9., 18., 27., 36., 45., 54., 63., 72., 81.]])
np.arange(0, 60, 10).reshape(-1, 1) + np.arange(0, 6)
array([[ 0, 1, 2, 3, 4, 5],
[10, 11, 12, 13, 14, 15],
[20, 21, 22, 23, 24, 25],
[30, 31, 32, 33, 34, 35],
[40, 41, 42, 43, 44, 45],
[50, 51, 52, 53, 54, 55]])
array切片
- a[(0,1,2,3,4),(1,2,3,4,5)] : 用于存取数组的下标和仍然是一个有两个元素的组元,组元中的每个元素都是整数序列,分别对应数组的第0轴和第1轴。从两个序列的对应位置取出两个整数组成下标: a[0,1], a[1,2], ..., a[4,5]。
- a[3:, [0, 2, 5]] : 下标中的第0轴是一个范围,它选取第3行之后的所有行;第1轴是整数序列,它选取第0, 2, 5三列。
- a[mask, 2] : 下标的第0轴是一个布尔数组,它选取第0,2,5行;第1轴是一个整数,选取第2列。mask=np.array([1,1,0,0,1,1],dtype=np.bool)
::2,隔一个取,a[2::2,2]第2列,第3行开始,没隔一行取
map用(),批量用[]
>>> x = np.arange(5,0,-1)
>>> x
array([5, 4, 3, 2, 1])
>>> x[np.array([True, False, True, False, False])]
>>> # 布尔数组中下标为0,2的元素为True,因此获取x中下标为0,2的元素
array([5, 3])
>>> x[[True, False, True, False, False]]
>>> # 如果是布尔列表,则把True当作1, False当作0,按照整数序列方式获取x中的元素
array([4, 5, 4, 5, 5])
>>> x[np.array([True, False, True, True])]
>>> # 布尔数组的长度不够时,不够的部分都当作False
array([5, 3, 2])
>>> x[np.array([True, False, True, True])] = -1, -2, -3
>>> # 布尔数组下标也可以用来修改元素
>>> x
array([-1, 4, -2, -3, 1])
结构数组(类似java的object数组)
定义
import numpy as np
persontype = np.dtype({
'names':['name', 'age', 'weight'],
'formats':['S32','i', 'f']})
a = np.array([("Zhang",32,75.5),("Wang",24,65.2)],
dtype=persontype)
访问
c = a[1]
>>> c["name"] = "Li"
>>> a[1]["name"]
"Li"
矩阵运算
numpy.diag(A,c=0) A是一个矩阵,c是偏移量,diag是找对角线上的数字,
dot(A,A) 矩阵乘法
A*2,对应项全乘2,
子主题
array.reshape()
matrix
子主题
矩阵计算
A=np.matrix(A)
A*A就是矩阵乘法
求逆,
from scipy.linalg import *
inv(C)/C.I
from scipy.linalg import *
inv(C)/C.I
行列式的值
from scipy.linalg import *
linalg.det(A)
from scipy.linalg import *
linalg.det(A)
子主题
数据统计
参数用array即可
np.shape() 维度
np.mean()
np.var() 方差
np.std() 标准差
np.std() 标准差
np.cumsum() 累加
np.cumprod() 累乘
np.trace() 对角线和
np.concatenate((合并项,不限数量)),axis=0)
vstack((合并项))
hstack((合并项))
vstack((合并项))
hstack((合并项))
类型转换
M=array()
M.astype()
M.astype()
矢量化函数
把单输入函数,改成批量传入批量返回的函数。比如func(a),正常每次只能传一个参数,[1,2,3]就得用for 循环调用,
np.vectorize(func)这个可以将函数的参数传入array[1,2,3]来返回array[func(1),func(2),func(3)]
np.vectorize(func)这个可以将函数的参数传入array[1,2,3]来返回array[func(1),func(2),func(3)]
M=array() /matrix()
(M>5).any() M中存在元素大于5
(M>5).all() M中所有元素都大于5
(M>5).any() M中存在元素大于5
(M>5).all() M中所有元素都大于5
0 条评论
下一页
为你推荐
查看更多