Numpy中不同形状数组的逐元素乘法

Numpy中不同形状数组的逐元素乘法

在本文中,我们将介绍如何在Numpy中进行不同形状数组的逐元素乘法。

在Numpy中,进行数组的逐元素乘法需要保证两个数组的形状一致,如下所示:

import numpy as np

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

c = a * b  # 输出 [4, 10, 18]
Python

但是,在实际的数据处理中,通常会遇到不同形状的数组进行逐元素乘法的情况,此时需要对不同形状的数组进行处理,使其成为一致的形状。

阅读更多:Numpy 教程

广播

在Numpy中,可以利用广播机制对不同形状的数组进行处理。广播的基本原则是将较小的数组广播到与较大的数组相同的形状,使得两个数组的形状一致,然后再进行逐元素乘法。

例如,对于如下两个数组:

import numpy as np

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

我们可以利用广播将数组b广播为[3,1]的形状,使其与数组a的形状一致:

b_broadcast = np.broadcast_arrays(a.reshape(3,1), b)[1]
'''
输出
array([[4, 4, 4],
       [5, 5, 5],
       [6, 6, 6]])
'''

c = a * b_broadcast  # 输出 [4, 8, 12, 20, 25, 30, 36, 42, 48]
Python

Tile

除了广播机制外,还可以利用Tile函数对数组进行扩展以满足形状一致的需求。

Tile函数可以对数组进行重复,可以指定沿着每个维度重复的次数,例如:

import numpy as np

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

a_tile = np.tile(a, 3)
'''
输出
array([1, 2, 3, 1, 2, 3, 1, 2, 3])
'''

b_tile = np.tile(b, (3, 1))
'''
输出
array([[4, 5, 6, 7, 8, 9],
       [4, 5, 6, 7, 8, 9],
       [4, 5, 6, 7, 8, 9]])
'''

c = a_tile * b_tile  # 输出 [4, 10, 18, 28, 40, 54, 4, 10, 18, 28, 40, 54, 4, 10, 18, 28, 40, 54]
Python

结语

本文介绍了在Numpy中进行不同形状数组的逐元素乘法的两种方法,即广播和Tile函数。通过这些方法,可以方便地对不同形状的数组进行处理,得到期望的结果。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册