NumPy
is the fundamental package for scientific computing in Python.
参考资料:
1. 安装 Numpy
使用包管理器安装
pip install numpy
或
conda install numpy
(可选)使用 pip 查看信息
pip show numpy
2. Numpy 数组
属性 | 说明 |
---|---|
.ndim |
秩,即轴的数量或维度的数量 |
.shape |
n行m列 |
.size |
n*m个数 |
.dtype |
元素类型 |
.itemsize |
元素大小,单位:字节 |
ndarray数组可以由非同质对象构成。
非同质ndarray元素为对象类型,dtype('O')
(1)创建方法
np.array(list/tuple,dtype=np.float32)
# 一维数组
np.array([1,2,3])
# 二维数组
np.array([(1,2,3),(4,5,6)])
# 等差数组
np.arange(start,stop,step)
np.arange(n)
np.ones(shape)
np.zeros(shape)
np.full(shape,val)
np.eye(n)
np.ones_like(a)
np.zeros_like(a)
-
np.full_like(a,val)
np.linspace(n,m,k,endpoint=True)
np.concatenate()
(2)变换方法
a.reshape(shape)
,对areshape
,返回shape形状数组a.resize(shape)
,同reshape
,但修改原数组a.swapaxes(ax1,ax2)
,调换维度a.flatten()
,降维,不改变anew_a=a.astype(new_type)
a.tolist()
(3)切片和子集
- 索引切片同
list
,但:多维间用,
隔开,eg:array[i,j]
:
可选取整个维度- 还有一种布尔索引,eg:
array[i<4]
(4)运算方法
a.mean()
- 元素群运算:
+
-
*
/
**
np.maxmum(x,y)
np.minimum(x,y)
算术比较,返回bool值 np.abs()
,np.fabs()
np.sqrt()
,np.square()
np.log()
,np.log2()
np.ceil()
,np.floor()
np.rint()
,四舍五入np.sin()
,np.cos()
np.exp()
,计算指数np.sign()
,返回1,0,-1
实践
import numpy as np
np.arange(5) #-->array([0, 1, 2, 3, 4])
np.ones([2,2]) #-->array([[1., 1.],1., 1.]])
np.linspace(1,10,4) #-->array([ 1., 4., 7., 10.])
3. random函数
np.random.uniform(low,high,size)
产生均匀分布数组np.random.normal(loc,scale,size)
产生正态分布数组,loc
均值,scale
标准差np.random.poisson(lam,size)
产生泊松分布数组,lam
随机事件发生概率
4. 统计函数
np.sum(a,axis=None)
np.mean(a,axis=None)
,计算期望np.average(a,axis=None,weights=None)
,计算加权平均np.std(a,axis=None)
,计算标准差np.var(a,axis=None)
,计算方差
此外,数组本身的方法也适用
array.sum()
array.min()
array.max()
array.cumsum()
,指定轴求累计和
5. 梯度函数
np.gradient(f)
,计算斜率
6. 文件读写
一维或二维
np.savetxt(frame,array,fmt,delimiter=None)
其中delimiter应该为,
eg.np.savetxt('foo.csv',a,fmt='%d',delimiter=',')
np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)
多维
a.tofile()
np.fromfile
np.save()
,npy文件np.load()
other
1. 转置矩阵
#做法一:
import numpy as np
class Solution:
def transpose(self, m: List[List[int]]) -> List[List[int]]:
return np.matrix(m).T.tolist()
#做法二:
class Solution:
def transpose(self, matrix: List[List[int]]) -> List[List[int]]:
return list(zip(*matrix))
2. 对图片进行手绘风格转变
from PIL import Image
import numpy as np
a = np.asarray(Image.open('./beijing.jpg').convert('L')).astype('float')
depth = 10. # (0-100)
grad = np.gradient(a) #取图像灰度的梯度值
grad_x, grad_y = grad #分别取横纵图像梯度值
grad_x = grad_x*depth/100.
grad_y = grad_y*depth/100.
A = np.sqrt(grad_x**2 + grad_y**2 + 1.)
uni_x = grad_x/A
uni_y = grad_y/A
uni_z = 1./A
vec_el = np.pi/2.2 # 光源的俯视角度,弧度值
vec_az = np.pi/4. # 光源的方位角度,弧度值
dx = np.cos(vec_el)*np.cos(vec_az) #光源对x 轴的影响
dy = np.cos(vec_el)*np.sin(vec_az) #光源对y 轴的影响
dz = np.sin(vec_el) #光源对z 轴的影响
b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) #光源归一化
b = b.clip(0,255)
im = Image.fromarray(b.astype('uint8')) #重构图像
im.save('./beijingHD.jpg')