📜  np.newaxis (1)

📅  最后修改于: 2023-12-03 15:17:59.194000             🧑  作者: Mango

Numpy中的np.newaxis

当我们使用Numpy进行数组操作时,经常需要改变数组的形状,以满足我们的需要。np.newaxis就是numpy中用来改变数组形状的一个标记。它可以在数组的其中一个维度上增加一个轴,从而增加数组的维度。在本篇文章中,我们将详细介绍np.newaxis在Numpy中的使用方法及一些实际应用场景。

1. 增加新维度

首先,我们来看一个非常简单的示例,展示如何使用np.newaxis增加一个新的维度。

import numpy as np

x = np.array([1, 2, 3, 4, 5])
print(x.shape)   # (5,)

# 使用np.newaxis增加一个新的维度
x = x[np.newaxis, :]
print(x.shape)   # (1, 5)

如上所示,我们可以使用np.newaxis在原数组的第0维位置增加一个新的维度。这里,我们利用了数组的切片操作,通过x[np.newaxis, :],将原来的一维数组转化为了一个新的二维数组。值得注意的是,在使用np.newaxis增加新的维度时,可能还需要对原数组进行转置等操作才能获得期望的结果。

2. 实际应用场景
2.1. 矩阵乘法

在矩阵乘法中,我们经常需要将两个维度不相同的数组进行乘积运算。这时候,我们就可以通过np.newaxis将其中一个数组增加一个新的维度,以满足矩阵乘法的相关规则。

以两个二维数组相乘为例:

import numpy as np

a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8],[9,10]])

c = a[:,:,np.newaxis]*b[np.newaxis,:,:]
print(c.shape)  # (2, 3, 2)

print(c)
# [[[ 5  6]
#   [15 18]
#   [27 30]]
#
#  [[35 40]
#   [49 56]
#   [63 70]]]

在上例中,我们将a转化为2x2x1的张量,将b转化为1x3x2的张量。通过*运算,我们得到了2x3x2的张量c,它的含义就是将a的每一行分别与b中的每一个元素分别相乘。

2.2. 卡方检验

卡方检验是图像处理领域中常用的一个假设检验方法。在卡方检验中,我们需要计算实际值与理论值之间的差异,而实际值和理论值给出的通常是二维数组。这时候,我们就可以通过np.newaxis将其中一个数组增加一个新的维度,以方便后续的运算。

import numpy as np

observed = np.array([[2, 2], [7, 8]])
expected = np.array([[3, 1], [6, 9]])

diff = observed - expected
diff_sq = (diff ** 2) / expected

chi_sq = diff_sq.sum(axis = (0,1))
print(chi_sq)  # 4.286

在上例中,我们将diff_sq沿着0号和1号维度进行求和,得到卡方值chi_sq。由于diff_sq是一个二维数组,而sum()函数只能在某个维度上求和,因此我们需要利用np.newaxis将其转化为一个三维数组,才能满足卡方检验的计算需求。

3. 总结

np.newaxis是Numpy中一个非常常用的标记,它可以在数组的其中一个维度上增加一个轴,从而增加数组的维度。在实际的数组操作中,np.newaxis不仅可以用于增加新的维度,还可以方便我们进行矩阵乘法、卡方检验等复杂的运算。因此,在使用Numpy时,熟练掌握np.newaxis的使用方法对于提高代码的效率非常有帮助。