Numpy中向量化赋值

Numpy中向量化赋值

在本文中,我们将介绍Numpy中向量化赋值的概念和使用。向量化是指通过一次操作对多个数据进行处理的方式,可以比循环操作更高效地完成任务。Numpy中向量化赋值使用了广播和掩码的技术,能够将一个数组的值赋给另一个数组的一部分或是一个条件下的部分。下面我们将分别介绍这两种方式。

阅读更多:Numpy 教程

广播

广播是指将一个较小的数组自动按照特定的规则扩展成较大的数组,使得两个数组具有相同的形状,从而可以进行一些计算。这个操作在Numpy中同样适用。具体而言,在进行向量化操作时,如果对广播有深入的理解,就可以大大提高性能。

Numpy中有一个广播规则,描述了无需复制数组即可执行运算的情况。它具有以下几条规则:

  • 如果两个数组的维度不同,则在较小的数组前面加上前导1,以使它们的维度相同。
  • 如果两个数组的形状在任何一维上都不同,并且任何一个数组的形状在该维度上的长度都不是1,则引发ValueError异常。
  • The size in each dimension of the output shape is the maximum of the input sizes in that dimension.
  • 一个数组在任何维度上的长度是1或者与另一个数组在该维度上的长度匹配时,我们称这个数组在该维度上与另一个数组广播兼容,即可以使用广播运算。

当使用向量化赋值实现向一个数组的某一部分赋值操作时,就可以利用广播特性,将对应部分的新值赋值给旧值,例如:

import numpy as np

a = np.zeros((3,2))
b = np.array([1, 2])
a[:,:] = b[:, np.newaxis]
print(a)
Python

输出结果为:

array([[1., 1.],
      [2., 2.],
      [0., 0.]])
Python

以上代码实现了对 a 数组的整个部分赋值为 b 数组,这里的 b[:, np.newaxis] 就使用了广播特性进行了扩展,即重复 b 数组的第一列,然后将其作为 a 数组的第一列赋值。

掩码

掩码是指创建一个布尔类型的数组,用于表示条件。在Numpy中,掩码可以通过布尔运算实现,例如:

import numpy as np

a = np.array([1, 2, 3, 4, 5])
mask = np.array([True, False, False, True, False])
a[mask] = 0
print(a)
Python

输出结果为:

array([0, 2, 3, 0, 5])
Python

以上代码实现了将 a 数组中符合条件的部分赋值为 0。这里的 mask 数组通过指定条件来创建,即只有符合条件的部分才会产生相应的赋值操作。

在使用掩码进行向量化赋值时,还可以结合广播来使用,例如:

import numpy as np

a = np.zeros((3,4))
mask = np.array([True, False, True])
a[mask,:] += 1
print(a)
Python

输出结果为:

array([[1., 1., 1., 1.],
      [0., 0., 0., 0.],
      [1., 1., 1., 1.]])
Python

以上代码实现了将 a 数组中符合条件的部分每个元素都加 1 的操作,这里的 mask 数组只对 a数组的第一行和第三行起作用,因此使用 mask 的值进行了广播扩展,然后将对应位置的值加 1

总结

本文介绍了Numpy中向量化赋值的两种方式:广播和掩码。通过对广播和掩码的深入了解和应用,可以大大提高代码的运行效率和可维护性。在实践中,我们还可以结合其他Numpy函数,例如 reshapetranspose 等,对数组进行灵活的处理,以满足不同的需求。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册