numpy不同阶数张量相加问题(broadcast)

本文介绍了如何对不同阶数的张量进行有效相加,特别是1阶张量(向量)与高阶张量之间的运算。通过实例展示了numpy库中多维数组的加法操作,用于数据去中心化等实际问题。同时,对比了numpy数组加法与python列表合并的区别,强调了理解张量加法在数据处理中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设有 [公式] 阶张量 [公式] , [公式] 阶张量 [公式] 。如果 [公式][公式] 的最后 [公式] 个维度相等。且其中一个张量,不妨设为 [公式] ,的前 [公式] 个都等于1或者 [公式] 。则这两个张量可以进行有效的相加。就好比一个低阶的张量加到高阶的张量的每个元素上去。

最典型的有样本数据的去中心化操作, [公式][公式] 是数据向量(1阶张量),而 [公式] 则是标量(0阶张量),是一个更高阶张量的每个元素减去低阶张量的操作,而每个元素需要与低阶张量有相同的形状(shape)。而最终相加后的到的张量的阶数是相对高阶张量的阶数。

例子:

import numpy as np

2阶张量+3阶张量

x = np.array([[1,2],
              [3,4],
              [5,6],
              [7,8]]) # (4,2), 2阶张量
y = np.array([[[2,1]]]) # (1,1,2), 3阶张量
x + y # (1,4,2), 3阶张量

3阶张量+2阶张量

x = np.array([[[1,2],
               [3,4]],
              [[5,6],
               [7,8]]]) # (2,2,2), 三阶张量
y = np.array([[2,1],
              [2,1]]) # (2,2),  2阶张量
x+y # (2,2,2), 3阶张量

对于一般的数据表+字段记录来看,以下两个加法操作是等价的:

x = np.array([[1,2],
              [3,4],
              [5,6],
              [7,8]]) # (4,2), 2阶张量
# 第一个加法操作:数据表x+矩阵(2阶张量)表示的一条记录
y = np.array([[2,1]]) # (1,2), 2阶张量,第一个维度必须为1
x + y # (4,2),2阶张量

第二个加法操作:数据表x加+向量(1阶张量)

y = np.array([2,1]) # (2,), 1阶张量
x + y # (4,2),2阶张量


最后注意一点,numpy多维数组ndarray的相加是为了方便数据的运算。而python原生list的相加则是list的合并,所以二者加法的思路是不一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值