在 Python 中迭代并从多维数组中选择特定数组

2024-03-31

想象一下我有这样的东西:

 import numpy as np
 arra = np.arange(16).reshape(2, 2, 4)  

这使

 array([[[0, 1, 2, 3],  
      [4, 5, 6, 7]],  
      [[8, 9, 10, 11],  
      [12, 13, 14, 15]]])     

我想创建一个沿着特定子数组运行的循环(在这种情况下,我想沿着每个“矩阵”的每个“列”运行)并对结果求和(即选择 0 和 4 并对它们求和(4) ,选择 1 和 5 并对它们求和 (6),...,选择 3 和 7 并对它们求和 (10),选择 8 和 12 并对它们求和 (20),...,选择 11 和 15 并对它们求和 ( 26))。

我曾想过用明显自然的方式做到这一点:

 for i in arra[i, j, k]:  
     for j in arra[i, j, k]:  
         for k in arra[i, j, k]:  
             sum...  

问题是Python肯定不允许以这种方式做我想做的事。如果它是一个 2D 数组,那就更容易了,因为我知道迭代器首先遍历行,因此您可以转置以沿列运行,但对于多维(在本例中为 3D)数组(N,M,P) N, M, P >> 1,我想知道如何做到这一点。

EDIT:这个问题在这里有延续:在Python中选择和迭代多维数组中的特定子数组 https://stackoverflow.com/questions/35775040/choosing-and-iterating-specific-sub-arrays-in-multidimensional-arrays-in-python


您可以使用map https://docs.python.org/2/library/functions.html#map完成此操作:

import numpy as np
arra = np.arange(16).reshape(2, 2, 4)  

然后命令:

map(sum, arra)

为您提供所需的输出:

[array([ 4,  6,  8, 10]), array([20, 22, 24, 26])]

或者,您也可以使用列表理解 https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions:

res = [sum(ai) for ai in arra]

Then res看起来像这样:

[array([ 4,  6,  8, 10]), array([20, 22, 24, 26])]

EDIT:

如果您想添加相同的行 - 正如您在这个答案下面的评论中提到的 - 您可以这样做(使用zip https://docs.python.org/2/library/functions.html#zip):

map(sum, zip(*arra))

这会给你想要的输出:

[array([ 8, 10, 12, 14]), array([16, 18, 20, 22])]

为了完整起见,还列出了列表理解:

[sum(ai) for ai in zip(*arra)]

这会给你相同的输出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python 中迭代并从多维数组中选择特定数组 的相关文章

随机推荐

  • 为什么我不能在 kotlin 中使用 lambda 接口? [复制]

    这个问题在这里已经有答案了 看 我有一个 Java 类 public final class JavaReceiveSingle public static void useSingle Single single single doSth
  • 为什么仅当我在 SDL2 中设置非零 Alpha 大小时才获得 sRGB 帧缓冲区?

    我正在尝试通过以下方式以伽玛正确的方式渲染典型的 OpenGL 颜色三角形本指南 https learnopengl com Advanced Lighting Gamma Correction并查阅 SDL2 文档 了解如何在默认帧缓冲区
  • 在类似热图的图中写入值,但对于seaborn中的分类变量

    我在类似热图的图中绘制了一个数据框 我想写入单元格 但不是单元格的值 但我将该值与条件进行比较并告诉它是哪种错误 例如 import pandas as pd import seaborn as sns matplotlib inline
  • 在 Android 模拟器中不使用 -writable-system 时,Hosts 文件中的更改会丢失

    我通过使用标志 writable system 启动模拟器来更新 Android 模拟器中的 system etc hosts 文件 emulator exe avd tablet writable system 当我在没有 writabl
  • Redshift 中“ADD COLUMN IF NOT EXISTS”的解决方法

    我正在尝试通过 Spark Redshift 执行 S3 复制操作 并且希望在运行复制命令之前修改 Redshift 表结构 以便添加任何缺失的列 它们应该都是 VARCHAR 我能做的是在运行副本之前发送一个 SQL 查询 所以理想情况下
  • inputStream 和 utf 8 有时显示“?”人物

    所以我已经处理这个问题一个多月了 我还通过谷歌检查了几乎所有可能的相关解决方案 但我找不到任何真正解决我的情况的东西 我的问题是我正在尝试从网站下载 html 源代码 但在大多数情况下我得到的是某些文本显示一些 其中的字符 很可能是因为该网
  • 定义类型别名

    我发现 Pascal 的一个非常有用的功能是能够命名数据类型 例如 type person record name string age int end var me person you person etc 你能在 C 中做类似的事情吗
  • jQuery Unslide - 触摸不起作用

    我已经解决了这个问题 我发帖只是为了帮助其他人节省一些时间 我正在将 unslider 用于商业网站 这是一个我正在制作的响应式网站 因此向滑块添加触摸支持的功能很有吸引力 不幸的是 正如作者声称的那样 它不能直接开箱即用 UPDATE我使
  • 学习游戏开发,有什么书推荐吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 通过 SSH 执行 sudo 的正确方法是什么?

    我有一个脚本 它通过 SSH 在远程服务器上运行另一个脚本sudo 但是 当我输入密码时 它会显示在终端上 否则它工作正常 ssh user server sudo script 执行此操作的正确方法是什么 以便我可以输入密码sudo通过
  • 使用 Windows 服务手动实现 IoC

    我是 IoC 的新手 因此一直在遵循 Jeffery Palermo 在他的帖子中提供的示例http jeffreypalermo com blog the onion architecture part 1 http jeffreypal
  • SQL:限制链接到每个连接行的行

    我有某些情况需要 MySQL 查询的某些结果集 让我们先看看当前的查询 然后问我的问题 SELECT thread dateline AS tdateline post dateline AS pdateline MIN post date
  • Python 中(大)1554 x 1554 矩阵的行列式

    我需要在 python 中计算单精度的大型 1554 1554 值矩阵的行列式 这样做时我遇到了运行时警告 import numpy as np from numpy import linalg as LA a np random rand
  • 我可以在不使用 npm、VS、Node 等而只使用 JS 代码本身的情况下转换 ES6-ES5 吗?

    我试图让 Firefox 在 ES6 中运行 Promise 但遇到了触发错误的 let 关键字 语法错误 let 是保留标识符 更改脚本标签以包含 类型 应用程序 javascript 版本 1 7 没有用 所以我正在寻求转换代码 我的情
  • Angular 服务测试出了什么问题?

    我有一个调用外部网络服务的服务 angular module myApp services service autoCmpltDataSvc function http var innerMatch function data return
  • 如何管理 mpz_t 数组

    我正在使用 GMP 我需要一系列mpz t sizeof mpz t 给出 16 但我存储的数字比这个大得多 做mpz t 就地 成长 i e 我是否需要分配更多内存并允许就地增长 或者 GMP 是否在其他地方为它们分配空间并仅保留引用 在
  • 忽略拼写检查中的文本框

    我正在尝试创建一个仅对特定单元格进行拼写检查的宏 我已成功对单元格进行拼写检查 但由于某种原因 拼写检查向导随后继续运行 并尝试检查电子表格上的任何文本框 下面是代码 Range C8 Select Selection CheckSpell
  • 如何限制 .net / mono 进程的内存大小

    假设您有一个用 C 编写的应用程序 单进程 默认情况下 应用程序分配巨大的虚拟内存 远远超过其需要 例如驻留内存约为 10mb 而虚拟内存约为几 GB 在 Java 中 可以使用一个选项来限制这一点 java mx128m 如何对 net
  • 截断 MD5 的 ECDF 图

    在这个link https stackoverflow com questions 8184941 uniform distribution of truncated md5 它表示截断的 MD5 是均匀分布的 我想使用 PySpark 检
  • 在 Python 中迭代并从多维数组中选择特定数组

    想象一下我有这样的东西 import numpy as np arra np arange 16 reshape 2 2 4 这使 array 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 我想创建一个沿着特定