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

Python中不同数组间行的所有组合乘法实现问题

解决行组合元素级乘积的问题

首先我猜你用的是NumPy数组(毕竟提到了shape属性),下面分两种常用方式帮你实现需求:

方法一:NumPy广播(推荐,效率更高)

NumPy的广播机制可以不用循环就生成所有行对的乘积,结果是一个(5,5,20)的三维数组,其中all_row_products[i,j,:]正好对应A[i,:] * B[j,:]的元素级乘积:

import numpy as np

# 示例数组,替换成你的真实数据
A = np.random.rand(5, 20)
B = np.random.rand(5, 20)

# 扩展维度实现广播:把A变成(5,1,20),B变成(1,5,20),相乘后自动匹配所有行对
all_row_products = A[:, np.newaxis, :] * B[np.newaxis, :, :]

# 验证形状:输出(5,5,20)
print(all_row_products.shape)

如果之后需要把三维数组转换成25个独立的行数组,可以用all_row_products.reshape(-1, 20),得到一个(25,20)的二维数组,每一行就是一组行对的乘积。

方法二:列表推导式(直观易懂)

如果你更习惯用循环方式,只要A和B是NumPy数组,原来的推导式其实可以工作——因为NumPy行向量((20,)形状)之间的*就是元素级乘法:

product_list = [x * y for x in A for y in B]

# product_list包含25个(20,)的NumPy数组,顺序是A[0]*B[0], A[0]*B[1], ..., A[4]*B[4]

特殊情况:如果你用的是普通Python列表

如果A和B是普通嵌套列表(比如A = [[...]*20 for _ in range(5)]),直接x*y会变成列表重复,这时候需要用嵌套推导式做元素级相乘:

product_list = [[a * b for a, b in zip(x, y)] for x in A for y in B]

这样得到的就是25个长度为20的列表,每个都是对应行的元素乘积。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:44:39