如何计算二维numpy数组所有列的总和(高效)

2025-03-07 09:02:00
admin
原创
30
摘要:问题描述:假设我有以下由四行和三列组成的二维 numpy 数组:>>> a = numpy.arange(12).reshape(4,3) >>> print(a) [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] 生成包含所...

问题描述:

假设我有以下由四行和三列组成的二维 numpy 数组:

>>> a = numpy.arange(12).reshape(4,3)
>>> print(a)
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]

生成包含所有列之和的一维数组的有效方法是什么(如[18, 22, 26])? 无需循环遍历所有列就可以做到这一点吗?


解决方案 1:

查看 的文档numpy.sum,特别注意axis参数。对列求和:

>>> import numpy as np
>>> a = np.arange(12).reshape(4,3)
>>> a.sum(axis=0)
array([18, 22, 26])

或者,对行求和:

>>> a.sum(axis=1)
array([ 3, 12, 21, 30])

其他聚合函数,例如numpy.meannumpy.cumsumnumpy.std,也接受axis参数。

来自暂定的Numpy教程:

许多一元运算(例如计算数组中所有元素的总和)都是作为ndarray类的方法实现的。默认情况下,这些操作应用于数组,就像它是数字列表一样,无论其形状如何。但是,通过指定axis
参数,您可以沿数组的指定轴应用操作:

解决方案 2:

对列求和的其他方法包括

numpy.einsum('ij->j', a)

numpy.dot(a.T, numpy.ones(a.shape[0]))

如果行数和列数处于相同的数量级,则所有可能性的速度大致相同:

如何计算二维numpy数组所有列的总和(高效)

然而,如果只有几列,einsumdot解决方案都明显优于 numpy sum(注意对数尺度):

如何计算二维numpy数组所有列的总和(高效)


重现情节的代码:

import numpy
import perfplot


def numpy_sum(a):
    return numpy.sum(a, axis=1)


def einsum(a):
    return numpy.einsum('ij->i', a)


def dot_ones(a):
    return numpy.dot(a, numpy.ones(a.shape[1]))


perfplot.save(
    "out1.png",
    # setup=lambda n: numpy.random.rand(n, n),
    setup=lambda n: numpy.random.rand(n, 3),
    n_range=[2**k for k in range(15)],
    kernels=[numpy_sum, einsum, dot_ones],
    logx=True,
    logy=True,
    xlabel='len(a)',
    )

解决方案 3:

使用以下axis论点:

>> numpy.sum(a, axis=0)
  array([18, 22, 26])

解决方案 4:

numpy.sum对于你的情况,使用.

sum = a.sum(axis=0)

解决方案 5:

然后 NumPysum函数采用一个可选的轴参数,该参数指定您希望沿哪个轴执行求和:

>>> a = numpy.arange(12).reshape(4,3)
>>> a.sum(0)
array([18, 22, 26])

或者,等效地:

>>> numpy.sum(a, 0)
array([18, 22, 26])

解决方案 6:

a.sum(0)

应该可以解决问题。它是二维的np.array,您将得到所有列的总和。axis=0是指向下方的维度和axis=1指向右侧的维度。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1887  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1425  
  在制造业数字化转型的进程中,PLM(产品生命周期管理)系统、ERP(企业资源计划)系统、MES(制造执行系统)以及 CAD(计算机辅助设计)软件都扮演着至关重要的角色。然而,这些系统和软件各自独立运行时,往往难以发挥出最大的协同效应。实现 PLM 系统与 ERP、MES、CAD 的有效集成,成为提升企业整体竞争力、优化...
plm系统的主要功能模块   3  
  产品生命周期管理(PLM)作为一种先进的管理理念和技术,在电子与半导体行业正发挥着日益重要的作用。随着电子与半导体行业的快速发展,产品更新换代速度加快,市场竞争愈发激烈,企业面临着诸多挑战,如缩短产品上市时间、提高产品质量、降低成本等。而PLM的应用为企业应对这些挑战提供了有效的解决方案,展现出巨大的应用价值。提升产品...
plm项目   4  
  PLM(产品生命周期管理)项目管理软件在现代企业的产品研发、生产与运营中扮演着至关重要的角色。它整合了从产品概念设计到退役的全流程数据与流程,助力企业提升效率、降低成本并增强创新能力。随着科技的飞速发展以及企业需求的不断演变,未来十年 PLM 项目管理软件的发展充满了无限可能,值得深入探讨与预测。智能化与自动化趋势智能...
plm产品全生命周期管理   6  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用