Numpy: 不同维度数组的加法 您所在的位置:网站首页 js两个数组相加会怎么样 Numpy: 不同维度数组的加法

Numpy: 不同维度数组的加法

2024-07-09 08:06| 来源: 网络整理| 查看: 265

Numpy: 不同维度数组的加法

在本文中,我们将介绍Numpy库中用于处理不同维度数组加法的方法。

在Numpy中,使用+运算符进行数组加法时,要求参加运算的数组必须具有相同的维度,否则会抛出ValueError异常。例如,以下的代码会抛出异常:

import numpy as np arr1 = np.array([1, 2, 3]) arr2 = np.array([[1, 2], [3, 4]]) arr3 = arr1 + arr2 # 抛出异常ValueError

Numpy提供了一些方法来解决不同维度数组加法的问题。

阅读更多:Numpy 教程

使用broadcasting

当参加加法运算的两个数组在某些维度上具有相同的大小时,Numpy会自动进行broadcasting操作,将较小的数组复制扩展成与较大数组相同的形状,然后再进行加法运算。例如,以下的代码会自动进行broadcasting操作,实现不同维度数组的加法:

import numpy as np arr1 = np.array([1, 2, 3]) arr2 = np.array([[1, 2], [3, 4]]) arr3 = arr1.reshape((3, 1)) + arr2 # 自动进行broadcasting print(arr3)

结果为:

array([[2, 3], [4, 5], [6, 7]])

在上面的代码中,使用了reshape方法将arr1数组形状改变为(3, 1),使得它在第二个维度上与arr2相同,然后就可以利用broadcasting来实现加法运算。

下面是一些broadcasting规则:

如果两个数组的维度数不同,则将形状的长度较少的数组用1在其最靠前的维度上进行填充,直到两个数组的形状都相同。 如果两个数组在某个维度上的形状长度相同,或其中一个数组在该维度上的长度为1,则称两个数组在该维度上兼容。 如果两个数组在所有维度上都兼容,则可以利用broadcasting来进行元素级别的运算。 如果两个数组在任一维度上的长度都不同,并且它们也不兼容,则会抛出异常ValueError。 使用expand_dims

当参加加法运算的两个数组维度数不同,且无法自动进行broadcasting时,可以使用expand_dims方法来扩展维度。例如,以下的代码创建了一个形状为(3,)的一维数组和一个形状为(2, 2)的二维数组,并使用expand_dims方法将一维数组扩展成二维数组,然后再与二维数组进行加法运算:

import numpy as np arr1 = np.array([1, 2, 3]) arr2 = np.array([[1, 2], [3, 4]]) arr3 = arr1[np.newaxis, :] + arr2 # 使用expand_dims方法扩展arr1的维度 print(arr3)

结果为:

array([[2, 4], [4, 6], [6, 8]])

在上面的代码中,使用了np.newaxis来创建一个新的维度,将一维数组扩展为二维数组。

使用reshape

可以使用reshape方法将一个数组变形成与另一个数组相同的形状,然后再进行加法运算。例如,以下的代码使用reshape方法将一维数组形状变为(3, 1),然后再与二维数组进行加法运算:

import numpy as np arr1 = np.array([1, 2, 3]) arr2 = np.array([[1, 2], [3, 4]]) arr3 = arr1.reshape((3, 1)) + arr2 # 使用reshape方法将arr1变形 print(arr3)

结果为:

array([[2, 3], [4, 5], [6, 7]])

在上面的代码中,使用了reshape方法将arr1数组形状改变为(3, 1),使得它在第二个维度上与arr2相同,然后就可以进行加法运算。

总结

Numpy提供了多种方法来解决不同维度数组加法的问题,其中最常用的是使用broadcasting。在使用broadcasting时,需要遵循一些规则,如数组形状的兼容性等。在无法使用broadcasting时,可以使用expand_dims和reshape等方法来实现不同维度数组的加法。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有