如何迭代这个n维数据集?

2023-11-25

我有一个dataset它有 4 个维度(目前......),我需要迭代它。

要访问中的值dataset,我这样做:

value = dataset[i,j,k,l]

现在,我可以获得shape为了dataset:

shape = [4,5,2,6]

中的值shape表示尺寸的长度。

给定维度数,如何迭代数据集中的所有元素?这是一个例子:

for i in range(shape[0]):
    for j in range(shape[1]):
        for k in range(shape[2]):
            for l in range(shape[3]):
                print('BOOM')
                value = dataset[i,j,k,l]

未来,shape可能会改变。例如,shape可能有 10 个元素,而不是当前的 4 个。

有没有一种好的、干净的方法用 Python 3 来做到这一点?


You could use itertools.product to iterate over the cartesian product 1 of some values (in this case the indices):

import itertools
shape = [4,5,2,6]
for idx in itertools.product(*[range(s) for s in shape]):
    value = dataset[idx]
    print(idx, value)
    # i would be "idx[0]", j "idx[1]" and so on...

但是,如果您想要迭代它是一个 numpy 数组,那么它could更容易使用np.ndenumerate:

import numpy as np

arr = np.random.random([4,5,2,6])
for idx, value in np.ndenumerate(arr):
    print(idx, value)
    # i would be "idx[0]", j "idx[1]" and so on...

1 You asked for clarification what itertools.product(*[range(s) for s in shape]) actually does. So I'll explain it in more details.

例如你有这个循环:

for i in range(10):
    for j in range(8):
        # do whatever

这也可以写成使用product as:

for i, j in itertools.product(range(10), range(8)):
#                                        ^^^^^^^^---- the inner for loop
#                             ^^^^^^^^^-------------- the outer for loop
    # do whatever

这意味着product只是减少数量的便捷方法独立的for 循环。

如果你想转换可变数量的for-循环到aproduct你基本上需要两个步骤:

# Create the "values" each for-loop iterates over
loopover = [range(s) for s in shape]

# Unpack the list using "*" operator because "product" needs them as 
# different positional arguments:
prod = itertools.product(*loopover)

for idx in prod:
     i_0, i_1, ..., i_n = idx   # index is a tuple that can be unpacked if you know the number of values.
                                # The "..." has to be replaced with the variables in real code!
     # do whatever

这相当于:

for i_1 in range(shape[0]):
    for i_2 in range(shape[1]):
        ... # more loops
            for i_n in range(shape[n]):  # n is the length of the "shape" object
                # do whatever
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何迭代这个n维数据集? 的相关文章

随机推荐

  • Swift - 将重载函数分配给变量

    我收到编译时错误 指出 myFunc 引用不明确 func f s String gt String return version 1 s func f sourceString s String gt String return vers
  • Mod 安全响应/请求正文大小?

    如何在 Mod Security 中获取响应 请求正文的大小 我不断收到此错误 例如 Mon Sep 17 23 34 38 2012 error client 192 168 1 1 ModSecurity Output filter R
  • WPF 中的两种方式百分比格式绑定

    我有这个文本框
  • 为什么有些网页的源代码都是一行?

    当查看很多网页的源代码 如JS CSS HTML 时 我发现它们都在一行中 他们是怎么做到的 他们使用一些工具来制作吗 我们可以重组它吗 Thanks 它是缩小的 HTML 即删除了空格 有很多工具可以做到这一点 你可以通过谷歌搜索找到它们
  • 使用 zcat 和 sed 或 awk 编辑压缩的 .gz 文本文件

    我正在尝试编辑压缩的 fastq gz 文本文件 通过删除第 2 6 10 14 行的前六个字符 我现在有两种不同的方法来执行此操作 使用 awk 或 sed 但这些仅如果文件被解压 似乎可以工作 我想编辑这些文件而不解压缩它们 并尝试了以
  • ASP.NET、VB:如何从后台代码访问 FormView 内的控件?

    我的 FormView 控件内有一个复选框和一个面板 我需要从后面的代码访问它们 以便使用复选框确定面板是否可见 这是我最初使用的代码 但由于我将控件放在 FormView 中 所以它不再起作用 Protected Sub checkGen
  • 简单的 C++ hash_set 示例

    我是 C 和 STL 的新手 我被以下存储自定义数据结构的哈希集的简单示例所困扰 include
  • 使用“grep”搜索选项卡,不带 -P

    我以前用过grep P早些时候成功了 直到我得到了一台 grep 未编译为支持 Perl 正则表达式的机器 现在我在匹配选项卡时遇到问题 t特点 grep G t matches a literal t grep E t matches a
  • MySQL foreach 循环

    我必须迭代 MySQL 中的 User 表中的每一行 我需要为用户中的每次迭代创建一个新行地址 并具有下面描述的一些条件 我有3张桌子 User id stuff id person email Person id stuff id add
  • 以编程方式检测 SQL Server 版本

    我将 C 与 SMO 结合使用 并尝试检测我正在连接的 SQL Server 版本 例如企业版 标准版 我知道如何获取版本信息 但这只能告诉我 SQL Server 的版本 例如 SQL Server 2008 与 SQL Server 2
  • 如何从 SFSafariViewController 获取 URL?

    我正在将 iOS 中的 fitbit login api 与 Objective C 集成 我需要获取回调 URL 我目前正在使用SFSafariViewController但登录后无法读取 URL 是否可以从以下位置获取 URLSFSaf
  • Jquery防止多次提交

    如果有人多次单击其中一个提交按钮 我想防止多次提交 How can unbind or undelgate在本例中调用我的自定义函数do some stuff这种情况只发生一次 因为我尝试了一些 jquery 方法 但我认为我做错了什么 谢
  • Django 上的脆皮表单变量不存在

    对于 Django 上的脆皮形式 我不断得到VariableDoesNotExist at Failed lookup for key form in u False False None None extends base html lo
  • DOMException:无法在“History”上执行“replaceState”:带有 URL 的历史状态对象

    在反应应用程序中 在谷歌上打开网页的缓存版本时出现以下错误 DOMException 无法在 历史记录 上执行 replaceState 历史记录 无法在 URL 为 https projecturl 的状态对象中创建 来源为 https
  • 选择不在另一个表中的所有列 laravel 5.5

    我有两个表 第一个表称为 用户 第二个表称为 buy courses 我正在尝试选择 user name 不在 buy courses 中的所有用户 我尝试过类似的东西 users DB table users gt rightjoin b
  • 仅允许来自特定引荐来源网址的用户(重定向其余部分)- HTACCESS

    我一直在尝试阻止所有试图查看 php 页面而不来自我的特定跟踪链接的人的访问 我希望如果他们不是来自我的链接 他们会被重定向到另一个网站 我尝试使用 htaccess 方法如下 RewriteEngine On RewriteBase al
  • Emacs 中的 Python 解释器重复行

    怎么了 gt gt gt 2 10 2 10 20 gt gt gt 我想要发生的事情 gt gt gt 2 10 20 gt gt gt 有谁知道为什么命令在执行之前被打印出来以及如何阻止它这样做 我找不到任何关于此的文档 我在 Mac
  • 使用 LINQ to SQL 关系表上的动态Where子句

    我需要动态 where 子句的帮助在关系表上 一对多 在 LinqToSql 中 用户从页面中选择条件 有4个输入供用户选择子句 例如 来自客户表的 CompanyName 和 CompanyTitle 以及来自订单表的 OrderDate
  • 服务器如何将异步更改推送到 JSF 创建的 HTML 页面?

    当我们创建 JSF 页面时 客户端请求允许使用 Java 代码和 HTML 的组合动态生成 HTML 我们能否使用 JSF 框架在 HTML 页面中引入钩子 允许服务器根据稍后在服务器上发生的异步事件 通常通过不同的线程 更新 HTML 页
  • 如何迭代这个n维数据集?

    我有一个dataset它有 4 个维度 目前 我需要迭代它 要访问中的值dataset 我这样做 value dataset i j k l 现在 我可以获得shape为了dataset shape 4 5 2 6 中的值shape表示尺寸