📅  最后修改于: 2023-12-03 14:44:45.674000             🧑  作者: Mango
在处理 numpy 数组时,我们常常需要在特定的维度上对数组进行归零操作。Numpy 提供了相应的函数可以方便地完成该操作。本文将介绍如何使用 numpy 的 np
模块在更多维度上归零。
在 numpy 中,“归零” 操作表示将数组中的所有元素设置为 0。但我们通常不会直接将数组的所有元素设置为 0,而是只希望在某些维度上将数组 “归零”。
numpy.zeros_like(a, dtype=None, order='K', subok=True, shape=None)
函数可以将一个数组的所有元素设置为 0,返回的结果数组的 shape 与输入数组相同。要在更多维度上归零,我们可以使用 numpy 的 shape
参数控制归零的维度。如果维度不是 0,则会将该维度的所有元素设置为 0。
import numpy as np
# 定义一个 3x3 的数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 归零 a 的第一维度
b = np.zeros_like(a, shape=(1, a.shape[1], a.shape[2]))
print(b)
# 归零 a 的第二维度
c = np.zeros_like(a, shape=(a.shape[0], 1, a.shape[2]))
print(c)
# 归零 a 的第三维度
d = np.zeros_like(a, shape=(a.shape[0], a.shape[1], 1))
print(d)
输出:
[[[0 0 0]
[0 0 0]
[0 0 0]]]
[[[0 0 0]]
[[0 0 0]]
[[0 0 0]]]
[[[0]
[0]
[0]]
[[0]
[0]
[0]]
[[0]
[0]
[0]]]
numpy.zeros(shape, dtype=float, order='C', *, like=None)
函数可以创建一个给定形状和数据类型的用 0 填充的数组。如果你只想在某个维度上归零,可以使用 numpy 的 slice
对象来选取特定的维度。slice
对象是一个包含不同数值的序列,形式上表示 [start:stop:step]
,用于在指定维度上进行切片。
import numpy as np
# 定义一个 3x3 的数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 归零 a 的第一维度
b = np.zeros(a.shape)
b[0,:,:] = a[0,:,:]
print(b)
# 归零 a 的第二维度
c = np.zeros(a.shape)
c[:,0,:] = a[:,0,:]
print(c)
# 归零 a 的第三维度
d = np.zeros(a.shape)
d[:,:,0] = a[:,:,0]
print(d)
输出:
[[[1. 2. 3.]
[0. 0. 0.]
[0. 0. 0.]]]
[[[1. 0. 3.]
[4. 0. 6.]
[7. 0. 9.]]]
[[[1. 2. 0.]
[4. 5. 0.]
[7. 8. 0.]]]
在这个例子中,我们使用了 numpy.zeros
函数创建了一个全 0 的数组,并使用 slice
对象对其进行切片,只将需要归零的维度的元素设置为原数组的元素值。通过这种方式,我们可以更加灵活地在不同维度中进行归零。
在 numpy 中,我们可以使用 numpy.zeros_like
和 numpy.zeros
函数实现在更多维度上归零操作。通过这些函数,我们可以更加灵活地操作数组,并以计算机高性能的方式完成操作。