📜  np 在更多维度上归零 (1)

📅  最后修改于: 2023-12-03 14:44:45.674000             🧑  作者: Mango

Numpy:在更多维度上归零

在处理 numpy 数组时,我们常常需要在特定的维度上对数组进行归零操作。Numpy 提供了相应的函数可以方便地完成该操作。本文将介绍如何使用 numpy 的 np 模块在更多维度上归零。

什么是 “归零”

在 numpy 中,“归零” 操作表示将数组中的所有元素设置为 0。但我们通常不会直接将数组的所有元素设置为 0,而是只希望在某些维度上将数组 “归零”。

numpy.zeros_like

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

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_likenumpy.zeros 函数实现在更多维度上归零操作。通过这些函数,我们可以更加灵活地操作数组,并以计算机高性能的方式完成操作。