numpy模块


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)创建方法

  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)
  1. np.arange(n)
  2. np.ones(shape)
  3. np.zeros(shape)
  4. np.full(shape,val)
  5. np.eye(n)
  6. np.ones_like(a)
  7. np.zeros_like(a)
  8. np.full_like(a,val)
  9. np.linspace(n,m,k,endpoint=True)
  10. np.concatenate()

(2)变换方法

  1. a.reshape(shape),对areshape,返回shape形状数组
  2. a.resize(shape),同reshape,但修改原数组
  3. a.swapaxes(ax1,ax2),调换维度
  4. a.flatten(),降维,不改变a
  5. new_a=a.astype(new_type)
  6. a.tolist()

(3)切片和子集

  1. 索引切片同 list,但:多维间用 , 隔开,eg: array[i,j]
  2. : 可选取整个维度
  3. 还有一种布尔索引,eg: array[i<4]

(4)运算方法

  1. a.mean()
  2. 元素群运算:+ - * / **
    np.maxmum(x,y)
    np.minimum(x,y)
    算术比较,返回bool值
  3. np.abs()np.fabs()
  4. np.sqrt()np.square()
  5. np.log()np.log2()
  6. np.ceil()np.floor()
  7. np.rint(),四舍五入
  8. np.sin()np.cos()
  9. np.exp(),计算指数
  10. 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函数

  1. np.random.uniform(low,high,size)
    产生均匀分布数组
  2. np.random.normal(loc,scale,size)
    产生正态分布数组,loc均值,scale标准差
  3. np.random.poisson(lam,size)
    产生泊松分布数组,lam随机事件发生概率

4. 统计函数

  1. np.sum(a,axis=None)
  2. np.mean(a,axis=None),计算期望
  3. np.average(a,axis=None,weights=None),计算加权平均
  4. np.std(a,axis=None),计算标准差
  5. np.var(a,axis=None),计算方差

此外,数组本身的方法也适用

  1. array.sum()
  2. array.min()
  3. array.max()
  4. array.cumsum(),指定轴求累计和

5. 梯度函数

  1. np.gradient(f),计算斜率

6. 文件读写

一维或二维

  1. np.savetxt(frame,array,fmt,delimiter=None)
    其中delimiter应该为 ,
    eg. np.savetxt('foo.csv',a,fmt='%d',delimiter=',')
  2. np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)

多维

  1. a.tofile()
  2. np.fromfile
  3. np.save(),npy文件
  4. 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')

文章作者: ╯晓~
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ╯晓~ !
评论
  目录