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

如何用NumPy内置方法实现无循环的一维与二维数组逐行相乘?

无循环实现一维数组与二维数组逐行相乘的NumPy方案

直接利用NumPy的广播特性,一行代码就能替代原有的for循环:

area_vector = area[:, np.newaxis] * normal

补充写法

如果习惯更通用的维度扩展方式,也可以用np.expand_dims:

area_vector = np.expand_dims(area, axis=1) * normal

Python 3.10及以上版本还能用更简洁的省略号写法:

area_vector = area[..., np.newaxis] * normal

原理说明

原循环里是拿area的每个元素(标量)去乘normal对应的整行,NumPy的广播机制会自动处理形状匹配:

  • area[:, np.newaxis]把形状为(N,)的一维数组转换成(N,1)的二维数组
  • 广播规则会将这个(N,1)的数组自动扩展为(N,3),和normal的(N,3)形状完全匹配,之后逐元素相乘就等价于原循环的逐行标量乘法
  • 这种方式的运算效率远高于Python层面的for循环,因为NumPy的核心运算都是底层C实现的,避免了Python循环的开销

内容的提问来源于stack exchange,提问作者Rigel F. do C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:22:39