如何高效将Numpy n×2数组与n×1数组对应相乘?
Numpy数组对应元素高效相乘的方法
在Numpy里,完全不需要用循环,利用广播机制就能高效实现你要的操作——这也是Numpy处理数组运算的核心优势之一,底层是C级别的运算,比Python循环快几个数量级,尤其是数据量较大时。
具体实现方式
假设你的数组是:
import numpy as np y = np.array([[1, 1], [2, 3], [1, 4]]) x = np.array([2, 4, 5]) # 这里x是一维数组,shape为(n,)
你只需要把x转换成和y列数匹配的二维数组(n×1),然后直接和y相乘即可:
# 方法1:用[:, np.newaxis]给x增加一个维度 result = y * x[:, np.newaxis] # 方法2:用reshape转换维度 result = y * x.reshape(-1, 1)
如果你的x本身就是n×1的二维数组(比如x = np.array([[2], [4], [5]])),那直接相乘就行:
result = y * x
运行后得到的结果就是你要的:
array([[ 2, 2], [ 8, 12], [ 5, 20]])
为什么这方法更高效?
Python循环是逐元素的解释型运算,而Numpy的广播乘法是把整个数组运算交给底层优化过的C代码执行,避免了Python层面的循环开销。当n的规模达到几万甚至几十万时,这种性能差异会非常显著。
内容的提问来源于stack exchange,提问作者Mikhail
相关产品推荐
相关产品推荐

