Numpy广播:将Python函数传播到Numpy数组上

Numpy广播:将Python函数传播到Numpy数组上

在本文中,我们将介绍Numpy广播的基本概念、例子和如何在Python函数中应用广播。

阅读更多:Numpy 教程

Numpy广播的基本概念

Numpy广播是一种强大的机制,它可以让Numpy在不同形状的数组之间执行数学运算,而无需复制数据。这通常可以让运算代码更简洁和更快。

广播的规则如下:

  1. 如果两个数组的维度不同,则在较小的维度的左侧添加一个值为1的维度,直到维度数相同。
  2. 如果两个数组的形状在任何一维中不同,但仍可以基于以下规则广播,那么它们也可以进行广播。
    • 数组的形状在维度上匹配。
    • 数组的形状在某个维度上为1。

例如,如果有一个形状为(2,1,3)的数组,和另一个形状为(1,2,3)的数组,则它们可以进行广播。

import numpy as np

A = np.array([[[ 0,  1,  2],
                [ 3,  4,  5]]])

B = np.array([[10, 15, 20],
              [25, 30, 35]])

C = A + B
print(C)
Python

输出:

[[[10 16 22]
  [28 34 40]]]
Python

C数组的形状是(1,2,3),它是A和B数组的和。这是通过广播实现的,其中B数组被扩展成(1,2,3)形状以匹配A数组的形状。

Numpy广播的例子

下面是另外一个例子。

import numpy as np

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

print(a + b)
Python

输出:

[5 7 9]
Python

在这个例子中,a和b都是形状为(3,)的一维数组,所以它们可以直接相加而无需进行广播。

还有一个例子,其中一个数组的形状是(2,1),另一个数组是标量。

import numpy as np

a = np.array([[1], [2]])
b = 3

print(a + b)
Python

输出:

[[4]
 [5]]
Python

在这个例子中,标量值b被广播成与a相同的形状。

如何在Python函数中应用广播

Numpy广播可以在普通Python函数中使用。对于一个二维数组,我们可以将一个函数应用于它的每一行或每一列。例如,我们可以编写一个函数,将每一行的最大值相加,并将结果存储在一个一维数组中。

import numpy as np

def row_maxes_sum(arr):
    row_maxes = np.amax(arr, axis=1)
    return np.sum(row_maxes)

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(row_maxes_sum(a))
Python

输出:

24
Python

在这个例子中,np.amax函数用于计算每一行的最大值,axis=1表示在每一行上执行。函数np.sum将每一行的最大值相加,生成标量值24。

总结

Numpy广播是一个非常强大的功能,可以让我们更方便地进行数据操作。它的实现机制很简单,可以很容易地使用在各种数据操作中。在这篇文章中,我介绍了Numpy广播的基本概念和简单示例,同时还演示了如何在Python函数中应用广播。掌握Numpy广播对于数据科学和机器学习都非常有帮助,因为可以用更少的代码实现更快速的计算。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册