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

如何优雅地将NumPy数组多列按行除以另一一维数组?

NumPy多列按行除以一维数组的优雅实现

要实现对NumPy数组的指定多列逐行除以一个一维数组,直接运算会因广播维度不匹配报错(如a1[:,:2] / a2会提示shapes (3,2) (3,)不兼容),转置的方法可行但不够简洁,以下是几种更优雅的实现方式:

方法1:利用索引增加维度(最简洁)

通过[:, None]给一维数组a2增加一个维度,使其形状变为(3,1),这样就能和(3,2)的a1[:,:2]按照广播规则完成逐行除法:

import numpy as np

a1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
a2 = np.array([11,12,13])

result = a1[:,:2] / a2[:, None]
print(result)
# 输出:
# [[0.09090909 0.18181818]
#  [0.33333333 0.41666667]
#  [0.53846154 0.61538462]]

方法2:显式扩展维度(更直观)

使用np.expand_dims明确扩展a2的维度,原理和方法1一致,适合需要清晰表达操作意图的场景:

result = a1[:,:2] / np.expand_dims(a2, axis=1)

方法3:指定运算轴(NumPy 1.25+)

如果使用NumPy 1.25及以上版本,可以直接在np.divide中指定axis=0,让一维数组沿着行轴与二维数组匹配运算,无需手动调整维度:

result = np.divide(a1[:,:2], a2, axis=0)

以上方法都能得到和转置法一致的结果,且代码更简洁易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 07:15:42