如何将数组与另一数组各元素逐元素相乘后拼接(无双重循环)
高效实现数组逐元素相乘后拼接的方法
给定两个NumPy数组:
import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6]])
需要得到结果数组 c:
np.array([[5, 10, 6, 12], [15, 20, 18, 24]])
要求先完成a与b的逐元素对应相乘,再将结果拼接,且不使用双重循环实现高效计算。
实现方法
利用NumPy的广播机制可以轻松实现,无需显式循环,充分利用底层优化提升效率:
方法一:广播+重塑形状
import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6]]) # 通过添加新维度实现广播相乘,得到形状为(2,2,2)的中间数组 products = a[:, :, np.newaxis] * b # 将中间数组重塑为目标形状 c = products.reshape(a.shape[0], -1)
方法二:广播+横向拼接
import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6]]) # 遍历b的元素,与a广播相乘后横向拼接 c = np.hstack([a * num for num in b[0]])
原理说明
NumPy的广播机制会自动扩展数组形状,让维度不匹配的数组可以进行逐元素运算。两种方法都避免了Python层面的循环,转而使用NumPy底层的C优化运算,效率远高于双重循环。
内容的提问来源于stack exchange,提问作者Lost1
相关产品推荐
相关产品推荐

