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

如何用Pythonic/Numpy方式实现二维数组行自乘及列元素累乘?

问题1:Pythonic/Numpy风格实现二维数组每行与自身相乘

得先明确你说的“相乘”是哪种场景,分两种情况处理最贴合Numpy的风格:

  • 元素级逐位相乘:如果是让每行的每个元素和自身直接相乘(本质就是每行元素平方),用Numpy的广播特性一行搞定,简洁又高效:

    result = arr * arr
    # 要是明确是求平方,用np.square(arr)可读性更强
    

    比如输入arr = np.array([[1,2],[3,4]]),结果会是[[1,4],[9,16]],完全符合Pythonic的简洁思路。

  • 矩阵外积相乘:如果是把每行作为行向量,和自身做矩阵外积(得到一个3D数组,每个元素是原行的外积矩阵),推荐用广播代替循环,性能更优:

    # 通过增加维度实现广播,避免apply_along_axis这类隐性循环
    result = arr[:, :, np.newaxis] * arr[:, np.newaxis, :]
    

    比如输入arr = np.array([[1,2],[3,4]]),结果会是一个(2,2,2)的数组,第一页是[[1,2],[2,4]],第二页是[[9,12],[12,16]],正好是每行与自身的外积结果。


问题2:Numpy内置函数实现按列累乘

当然有更合适的方案!np.prod()就是Numpy专门为这类需求设计的内置函数,比用reduce要高效且直观得多:

import numpy as np
arr = np.array([[1,2,3],[1,2,3],[1,2,3]])
prod = np.prod(arr, axis=0)
# 输出结果:array([1, 8, 27])

为什么这是更好的选择?

  • 性能碾压:Numpy内置函数是底层C优化的向量化操作,比Python层面的reduce循环快几个数量级,数组规模越大差距越明显。
  • 可读性拉满:np.prod(arr, axis=0)一眼就能看懂是按列计算乘积,而lambda+reduce的写法需要额外花时间理解逻辑。
  • 灵活性更高:还能通过dtype参数指定结果类型,避免整数溢出问题,比如np.prod(arr, axis=0, dtype=np.int64)。

要是需要按行累乘,只需要把axis改成1就行,非常灵活。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:08:52