首页 > 编程问答 >python中多维数组的cumsum的逆

python中多维数组的cumsum的逆

时间:2024-09-24 17:50:20浏览次数:11  
标签:python arrays numpy cumsum

我想知道如何在Python中对多维数组进行累积和的逆运算。

例如,我们可以通过 P My获得给定二维数组的累积数组 T 问题是,我如何从

import numpy as np
T = np.array([[1,3,2],[5,5,6],[1,8,3]])
P = np.cumsum(np.cumsum(T, axis=0), axis=1)
print(P)
# P is then, 
# [[1, 4, 6],
#  [6,14,22],
#  [7,23,34]]

获取 T ?我想从 P 重建 T P 上面是一个二维情况,但我需要一个实现,其中

T 可以是任何维度。 P Julia的答案是提供:

Julia 中 cumsum 的逆 不过,我仍在寻找 Python 的答案。

Still, I am seeking the answer for Python.


可以使用 numpy.diff 函数沿给定轴计算数组元素之间的离散差异来反转 numpy 中的 cumsum 操作。

这是一个适用于任何维度数组的Python函数:

import numpy as np

def inverse_cumsum(P, axis=None):
  """
  计算多维数组的累积和的反函数。

  Args:
    P: 输入数组。
    axis: 计算差值的轴。如果为 None,则将数组沿最后一个轴进行扁平化处理。

  Returns:
    P 的累积和的反函数。
  """

  if axis is None:
    return np.concatenate(([P.flatten()[0]], np.diff(P.flatten())))
  else:
    return np.concatenate((np.expand_dims(P[(slice(None),) * axis + (0,)], axis=axis), np.diff(P, axis=axis)), axis=axis)

# 示例用法:
T = np.array([[1,3,2],[5,5,6],[1,8,3]])
P = np.cumsum(np.cumsum(T, axis=0), axis=1)
T_recovered = inverse_cumsum(P, axis=1) 
T_recovered = inverse_cumsum(T_recovered, axis=0) 

print(T_recovered) 

这将输出:

[[1 3 2]
 [5 5 6]
 [1 8 3]]

这就是原始数组 T

解释:

  1. inverse_cumsum(P, axis) 函数:
  2. 它接受输入数组 P 和可选的 axis 参数。
  3. 如果 axis None ,则在计算差值之前,它会将数组沿最后一个轴进行扁平化处理。
  4. 它使用 np.diff(P, axis=axis) 沿给定轴计算 P 中元素之间的差异。这给出了除了第一个元素之外的原始数组。
  5. 它使用 np.concatenate() 将第一个元素(沿给定轴的第一个元素)和计算出的差值连接起来。
  6. 它返回结果数组,即 P 的累积和的反函数。

  7. 示例用法:

  8. 它首先使用嵌套的 np.cumsum() 调用计算二维数组 T 的累积和 ( P )。
  9. 然后,它调用 inverse_cumsum() 两次,一次用于每个轴,以恢复原始数组 T
  10. 最后,它打印恢复的数组 T

这个函数适用于任何维度的数组,因为它灵活地处理 axis 参数,并且如果未提供 axis ,则将输入数组视为扁平化数组。

标签:python,arrays,numpy,cumsum
From: 79017954

相关文章

  • Vscode 远程切换Python虚拟环境
    在VSCode中远程切换Python虚拟环境是一个涉及多个步骤的过程,包括安装必要的扩展、连接到远程服务器、创建或激活虚拟环境,并在VSCode中选择相应的Python解释器。以下是一个详细的步骤指南,包括代码示例,旨在帮助我们完成这一过程。1.Vscode远程切换Python虚拟环境的步骤1.1步骤1......
  • 我无法在我的项目 Pycharm 中导入 opencv-python
    (myvenv)PSE:\Python>pipinstallopencv-pythonCollectingopencv-pythonUsingcachedopencv-python-4.10.0.84.tar.gz(95.1MB)Installingbuilddependencies...errorerror:subprocess-exited-with-error×pipsubprocesstoinstallbuilddepe......
  • 如何进行数据清洗?以python和ETL工具为例
    数据清洗是数据分析处理中非常重要的一步,它涉及到识别并处理数据集中的错误或不一致信息,以提高数据质量。数据清洗直接对后续数据处理产生决定性影响,去除重复错误无效的数据能够大大提升数据分析的效率。本文将介绍数据清洗的常用方法和工具,同时以python为例用代码进行数据清洗......
  • 基于Python+Vue开发的蛋糕商城管理系统源码+开发文档
    项目简介该项目是基于Python+Vue开发的蛋糕商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的蛋糕商城管理系统项目,大学生可以在实践中学习和提升自己的能力......
  • 基于Python+Vue开发的旅游景区管理系统源码+开发文档1.3万字
    项目简介该项目是基于Python+Vue开发的旅游景区管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的旅游景区管理系统项目,大学生可以在实践中学习和提升自己的能力......
  • 基于Python+Vue开发的医院门诊预约挂号系统源码+开发文档
    项目简介该项目是基于Python+Vue开发的医院门诊预约挂号系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的医院门诊预约挂号管理系统项目,大学生可以在实践中学习和......
  • 基于Python+Vue开发的音乐推荐管理系统源码+开发文档
    项目简介该项目是基于Python+Vue开发的音乐推荐管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的音乐推荐管理系统项目,大学生可以在实践中学习和提升自己的能力......
  • 基于Python+Vue开发的电影订票管理系统源码+开发文档
    项目简介该项目是基于Python+Vue开发的电影订票管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的电影订票管理系统项目,大学生可以在实践中学习和提升自己的能力......
  • 基于Python+Vue开发的鲜花商城管理系统源码+开发文档
    项目简介该项目是基于Python+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力......
  • 基于Python+Vue开发的农产品商城管理系统源码+开发文档
    项目简介该项目是基于Python+Vue开发的农产品商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的农产品商城管理系统项目,大学生可以在实践中学习和提升自己的......