跳转到内容

感谢赞赏

微信
支付宝

感谢赞赏

赞赏码

Numpy 速查表

前言

Numpy 是 Python 中用于科学计算的基础库,提供了多维数组对象和各种派生对象(如掩码数组和矩阵),以及用于快速操作数组的函数。它也是 SciPy 生态系统的基础,SciPy 提供了更多的科学计算功能。使用 Numpy 可以快速实现数组的计算、统计、排序、过滤、聚合等高效的向量化操作。

在学习 Numpy 之前首先要建立一个向量化概念,什么是向量化操作?

向量化操作是指使用Numpy提供的内置函数直接对整个数组进行运算,而不是使用Python循环逐个处理元素。这样做的好处是速度快很多——通常快10-100倍。

简单来说,向量化就是让计算机一次处理整个数组,而不是一个一个处理,这样就能发挥计算机的并行处理能力,速度快得多。特别是在科学计算领域和图像处理中,科学计算任务的矩阵运算和图像本身就是多维数组,必须用向量化才能有好的性能!使用向量化操作的代码看起来更简洁、更易读,而且更符合Python的编程风格。

快速创建数组

方法描述示例
np.array()创建一个数组np.array([1, 2, 3, 4, 5])
np.zeros()创建一个全0数组np.zeros((3, 3))
np.ones()创建一个全1数组np.ones((3, 3))
np.empty()创建一个空数组np.empty((3, 3))
np.arange()创建一个等差数组np.arange(10)
np.linspace()创建一个等差数组np.linspace(0, 10, 5)
np.logspace()创建一个对数数组np.logspace(0, 2, 5)
np.random.rand()创建一个随机数组np.random.rand(3, 3)

常用属性与方法

常用方法描述示例
np.shape获取数组形状,返回一个元组,表示数组的维度np.shape(arr)
np.ndim获取数组维度,返回一个整数,表示数组的维度np.ndim(arr)
np.size获取数组元素个数,返回一个整数,表示数组的元素个数np.size(arr)
np.dtype获取数组元素类型,返回一个数据类型对象np.dtype(arr)
np.astype()转换数组元素类型,返回一个新数组np.astype(arr, dtype)
np.reshape()重塑数组形状,返回一个新数组np.reshape(arr, newshape)
np.flatten()展平数组,返回一个新数组np.flatten(arr)
np.transpose()转置数组,返回一个新数组np.transpose(arr)
np.dot()矩阵乘法,返回一个新数组np.dot(arr1, arr2)
np.sum()求和,返回一个整数np.sum(arr)
np.mean()求平均值,返回一个浮点数np.mean(arr)
np.std()求标准差,返回一个浮点数np.std(arr)
np.max()求最大值,返回一个浮点数np.max(arr)
np.min()求最小值,返回一个浮点数np.min(arr)

数组运算

运算符描述示例
+数组元素相加,返回一个新数组arr1 + arr2
-数组元素相减,返回一个新数组arr1 - arr2
*数组元素相乘,返回一个新数组arr1 * arr2
/数组元素相除,返回一个新数组arr1 / arr2
**数组元素幂运算,返回一个新数组arr1 ** arr2
%数组元素取模,返回一个新数组arr1 % arr2
//数组元素整除,返回一个新数组arr1 // arr2
&数组元素按位与,返回一个新数组arr1 & arr2
|数组元素按位或,返回一个新数组arr1 | arr2
  • 简单说说矩阵乘法的规则

规则:结果矩阵的第(i,j)位置 = 第一个矩阵的第i行 与 第二个矩阵的第j列 对应元素相乘后求和。这也有一种俗称叫点积运算。

比如下面的例子:

numpy矩阵运算

重要概念

  • 必须满足维度要求:(m×n) × (n×p) = (m×p)

    第一个矩阵的列数必须等于第二个矩阵的行数

  • 不可交换:A × B ≠ B × A(矩阵乘法不满足交换律)

数组统计

统计方法描述示例
np.sum()求和,返回一个整数np.sum(arr)
np.mean()求平均值,返回一个浮点数np.mean(arr)
np.std()求标准差,返回一个浮点数np.std(arr)
np.max()求最大值,返回一个浮点数np.max(arr)
np.min()求最小值,返回一个浮点数np.min(arr)

数组排序

排序方法描述示例
np.sort()排序,返回一个新数组np.sort(arr)
np.argsort()返回排序后的索引,返回一个新数组np.argsort(arr)
np.lexsort()返回排序后的索引,返回一个新数组np.lexsort(arr)
np.searchsorted()返回排序后的索引,返回一个新数组np.searchsorted(arr, value)
np.partition()返回排序后的索引,返回一个新数组np.partition(arr, k)
np.argpartition()返回排序后的索引,返回一个新数组np.argpartition(arr, k)

数组过滤

过滤方法描述示例
np.where()返回满足条件的索引,返回一个新数组np.where(condition)
np.nonzero()返回满足条件的索引,返回一个新数组np.nonzero(arr)
np.logical_and()返回满足条件的索引,返回一个新数组np.logical_and(arr1, arr2)
np.logical_or()返回满足条件的索引,返回一个新数组np.logical_or(arr1, arr2)
np.logical_not()返回满足条件的索引,返回一个新数组np.logical_not(arr)
np.logical_xor()返回满足条件的索引,返回一个新数组np.logical_xor(arr1, arr2)
np.logical_and()返回满足条件的索引,返回一个新数组np.logical_and(arr1, arr2)
np.logical_or()返回满足条件的索引,返回一个新数组np.logical_or(arr1, arr2)
np.logical_not()返回满足条件的索引,返回一个新数组np.logical_not(arr)
np.logical_xor()返回满足条件的索引,返回一个新数组np.logical_xor(arr1, arr2)

数组聚合

聚合方法描述示例
np.sum()数组元素求和,返回一个浮点数np.sum(arr)
np.mean()数组元素求平均值,返回一个浮点数np.mean(arr)
np.std()数组元素求标准差,返回一个浮点数np.std(arr)
np.max()数组元素求最大值,返回一个浮点数np.max(arr)
np.min()数组元素求最小值,返回一个浮点数np.min(arr)

数组广播

广播方法描述示例
np.broadcast()广播数组np.broadcast(arr1, arr2)
np.broadcast_to()广播数组np.broadcast_to(arr, shape)
np.broadcast_arrays()广播数组np.broadcast_arrays(arr1, arr2)
np.broadcast_to()广播数组np.broadcast_to(arr, shape)

数组索引

索引方法描述示例
np.index()索引数组np.index(arr, index)
np.index_exp()索引数组np.index_exp(arr, index)
np.index_exp()索引数组np.index_exp(arr, index)

数组拼接

拼接方法描述示例
np.concatenate()拼接数组np.concatenate(arr1, arr2)
np.stack()拼接数组np.stack(arr1, arr2)
np.hstack()拼接数组np.hstack(arr1, arr2)
np.vstack()拼接数组np.vstack(arr1, arr2)
np.dstack()拼接数组np.dstack(arr1, arr2)
np.column_stack()拼接数组np.column_stack(arr1, arr2)
np.row_stack()拼接数组np.row_stack(arr1, arr2)

数组分割

分割方法描述示例
np.split()分割数组np.split(arr, indices_or_sections)
np.hsplit()分割数组np.hsplit(arr, indices_or_sections)
np.vsplit()分割数组np.vsplit(arr, indices_or_sections)
np.dsplit()分割数组np.dsplit(arr, indices_or_sections)
np.column_split()分割数组np.column_split(arr, indices_or_sections)
np.row_split()分割数组np.row_split(arr, indices_or_sections)

数组转置

转置方法描述示例
np.transpose()转置数组np.transpose(arr)
np.T转置数组np.T(arr)
np.swapaxes()转置数组np.swapaxes(arr, axis1, axis2)
np.rollaxis()转置数组np.rollaxis(arr, axis, start)
np.moveaxis()转置数组np.moveaxis(arr, source, destination)
np.roll()转置数组np.roll(arr, shift, axis=None)
np.move()转置数组np.move(arr, source, destination)
np.rollaxis()转置数组np.rollaxis(arr, axis, start)
np.moveaxis()转置数组np.moveaxis(arr, source, destination)

数组裁剪

裁剪方法描述示例
np.clip()裁剪数组np.clip(arr, min, max)
np.compress()裁剪数组np.compress(condition, arr)
np.extract()裁剪数组np.extract(condition, arr)
np.put()裁剪数组np.put(arr, indices, values)
np.putmask()裁剪数组np.putmask(arr, mask, values)
np.fill()裁剪数组np.fill(arr, value)
np.seterr()裁剪数组np.seterr(all='ignore')
np.seterr()裁剪数组np.seterr(all='ignore')

数组函数

函数描述示例
np.sin()正弦函数np.sin(arr)
np.cos()余弦函数np.cos(arr)
np.tan()正切函数np.tan(arr)
np.arcsin()反正弦函数np.arcsin(arr)
np.arccos()反余弦函数np.arccos(arr)
np.arctan()反正切函数np.arctan(arr)
np.sinh()双曲正弦函数np.sinh(arr)
np.cosh()双曲余弦函数np.cosh(arr)
np.tanh()双曲正切函数np.tanh(arr)
np.sqrt()平方根函数np.sqrt(arr)
np.exp()指数函数np.exp(arr)
np.log()对数函数np.log(arr)
np.log10()以10为底的对数函数np.log10(arr)
np.log2()以2为底的对数函数np.log2(arr)
np.log1p()以e为底的对数函数np.log1p(arr)
np.log2p()以2为底的对数函数np.log2p(arr)
np.log10p()以10为底的对数函数np.log10p(arr)

数组应用

应用方法描述示例
np.apply_along_axis()应用数组np.apply_along_axis(func, axis, arr)
np.apply_over_axes()应用数组np.apply_over_axes(func, arr, axes)
np.apply_along_axis()应用数组np.apply_along_axis(func, axis, arr)

图片像素操作

目标代码
整个图像变黑img[:, :, :] = 0 或 img[...] = 0
整个图像变白img[:, :, :] = 255
只清零某通道img[:, :, 0] = 0
乘以系数img *= 0.5

用心创造世界,用技术改变未来。