You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用numpy实现张量与向量的外积:维度匹配问题求助

解决numpy中张量与向量的外积维度匹配问题

要得到目标形状500x500x80的张量,核心是利用numpy的广播机制或np.einsum实现维度对齐,以下是两种可行方案:

方案1:广播机制实现

通过调整向量维度,让它和张量满足广播条件,再做元素乘法即可得到对应维度的外积矩阵:

import numpy as np

# 构造示例数据(替换为你的实际张量和向量)
A = np.random.rand(500, 1, 80)  # shape (500, 1, 80)
B = np.random.rand(500, 1)      # shape (500, 1)

# 将向量B变形为(1, 500, 1),与A的维度满足广播规则
B_reshaped = B.reshape(1, 500, 1)

# 广播乘法得到目标张量
result = A * B_reshaped

# 验证形状
print(result.shape)  # 输出 (500, 500, 80)

原理:A的每个元素是A[i, 0, k],B_reshaped的每个元素是B_reshaped[0, j, 0],广播乘法后result[i, j, k] = A[i,0,k] * B[j,0],正好对应第k个500x1向量与B的外积矩阵,最终堆叠成500x500x80的张量。

方案2:用np.einsum直接指定维度运算

np.einsum可通过下标直接定义运算规则,逻辑更直观:

import numpy as np

A = np.random.rand(500, 1, 80)
B = np.random.rand(500, 1)

# 下标规则:ijk对应A的(500,1,80),lj对应B的(500,1),输出ilk即(500,500,80)
result = np.einsum('ijk,lj->ilk', A, B)

print(result.shape)  # 输出 (500, 500, 80)

两种方案都能精准匹配所需维度,任选其一即可。

内容的提问来源于stack exchange,提问作者user619755

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 06:35:04