- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我有一个大的 3D 数据矩阵,比如 10000X10000X1000,现在我需要做的是遍历 3D 数据矩阵的每个元素并将索引和 2 的值写入文件大小相同的不同矩阵,一条线的例子:
i j k val1 val2
我目前所做的是在 3 个嵌套循环中运行并按以下方式打印它,例如 2 个小型 3D 数据矩阵和方法:
import numpy as np
vv1= np.array([[[1,2,3],[2,3,4],[3,4,5]],
[[4,5,6],[5,6,7],[6,7,8]],
[[7,8,9],[8,9,10],[9,10,11]]])
vv2= np.array([[[1,2,3],[2,3,4],[3,4,5]],
[[4,5,6],[5,6,7],[6,7,8]],
[[7,8,9],[8,9,10],[9,10,11]]])
for x in range(vv1.shape[0]):
for y in range(vv1.shape[1]):
for z in range(vv1.shape[2]):
print("{:} {:} {:} {:} {:}".format(x,y,z,vv1[x,y,z], vv2[x,y,z]))
这个简单的代码可以完成工作,但速度很慢。
我想到的另一种方法是创建一个 1D 长向量,每个条目将是 3 个索引值,然后将相同的逻辑应用于打印,例如嵌套循环示例:
vv_ind = []
for x in range(vv1.shape[0]):
for y in range(vv1.shape[1]):
for z in range(vv1.shape[2]):
vv_ind.append([x,y,z])
for elem in vv_ind:
i = tuple(elem)
print("{:} {:} {:} {:} {:}".format(*elem, vv1[i], vv2[i]))
它给出了所需的输出。
我的问题如下:
关于最后一个打印循环:
for elem in vv_ind:
i = tuple(elem)
print("{:} {:} {:} {:} {:}".format(*elem, vv1[i], vv2[i]))
有没有更有效的方法呢?
同样,这里给出的数组只是为了方便起见的虚拟数组
希望得到一些帮助
最佳答案
您可以使用 np.mgrid
用于生成索引,如果您不介意将所有内容保存为相同的数据类型,您可以将数组堆叠在一起并通过 np.save
或 np.savetxt
:
In [1]: import numpy as np
In [2]: a = np.random.randint(0, 255, size=(4, 4, 4))
In [3]: b = np.random.randint(0, 255, size=(4, 4, 4))
In [4]: data = np.stack([x.ravel() for x in np.mgrid[:4, :4, :4]] + [a.ravel(), b.ravel()], axis=1)
In [5]: np.save('/tmp/test.npy', data)
In [6]: data
Out[6]:
array([[ 0, 0, 0, 169, 35],
[ 0, 0, 1, 14, 120],
[ 0, 0, 2, 93, 207],
[ 0, 0, 3, 70, 158],
[ 0, 1, 0, 115, 52],
[ 0, 1, 1, 10, 248],
[ 0, 1, 2, 5, 123],
[ 0, 1, 3, 125, 143],
[ 0, 2, 0, 73, 241],
[ 0, 2, 1, 25, 118],
[ 0, 2, 2, 240, 159],
[ 0, 2, 3, 60, 179],
[ 0, 3, 0, 29, 221],
[ 0, 3, 1, 214, 33],
[ 0, 3, 2, 145, 60],
[ 0, 3, 3, 207, 74],
[ 1, 0, 0, 7, 37],
[ 1, 0, 1, 146, 192],
[ 1, 0, 2, 227, 83],
[ 1, 0, 3, 247, 51],
[ 1, 1, 0, 253, 18],
[ 1, 1, 1, 188, 2],
[ 1, 1, 2, 164, 252],
[ 1, 1, 3, 192, 229],
[ 1, 2, 0, 18, 236],
[ 1, 2, 1, 85, 48],
[ 1, 2, 2, 20, 233],
[ 1, 2, 3, 81, 152],
[ 1, 3, 0, 122, 30],
[ 1, 3, 1, 227, 221],
[ 1, 3, 2, 11, 247],
[ 1, 3, 3, 84, 203],
[ 2, 0, 0, 5, 94],
[ 2, 0, 1, 174, 179],
[ 2, 0, 2, 224, 222],
[ 2, 0, 3, 168, 40],
[ 2, 1, 0, 160, 136],
[ 2, 1, 1, 16, 121],
[ 2, 1, 2, 237, 241],
[ 2, 1, 3, 70, 29],
[ 2, 2, 0, 127, 188],
[ 2, 2, 1, 33, 67],
[ 2, 2, 2, 4, 138],
[ 2, 2, 3, 153, 114],
[ 2, 3, 0, 162, 8],
[ 2, 3, 1, 254, 91],
[ 2, 3, 2, 153, 69],
[ 2, 3, 3, 167, 33],
[ 3, 0, 0, 99, 101],
[ 3, 0, 1, 26, 2],
[ 3, 0, 2, 162, 131],
[ 3, 0, 3, 23, 97],
[ 3, 1, 0, 226, 37],
[ 3, 1, 1, 5, 130],
[ 3, 1, 2, 215, 164],
[ 3, 1, 3, 247, 95],
[ 3, 2, 0, 138, 49],
[ 3, 2, 1, 248, 175],
[ 3, 2, 2, 134, 39],
[ 3, 2, 3, 170, 67],
[ 3, 3, 0, 1, 177],
[ 3, 3, 1, 245, 31],
[ 3, 3, 2, 71, 160],
[ 3, 3, 3, 81, 9]])
否则你也可以使用np.ndindex
遍历数组索引:
In [10]: with open('/tmp/test.txt', 'w') as fh:
...: for index in np.ndindex(*a.shape):
...: data = map(str, index + (a[index], b[index]))
...: fh.write(','.join(data) + '\n')
关于arrays - 将 3D numpy 数组转换为 3 个索引的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59193678/
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我试图用这种形式简单地获取数字 28 integer+space+integer+integer+space+integer我试过这个正则表达式 \\s\\d\\d\\s 但我得到了两个数字11 和
最近一直在学习D语言。我一直对运行时感到困惑。 从我能收集到的关于它的信息中,(这不是很多)我知道它是一种有助于 D 的一些特性的运行时。像垃圾收集一样,它与您自己的程序一起运行。但是既然 D 是编译
想问一下这两个正则表达式有区别吗? \d\d\d 与 \d{3} 我已经在我的本地机器上使用 Java 和 Windows 操作系统对此进行了测试,两者都工作正常并且结果相同。但是,当在 linux
我正在学习 Go,而且我坚持使用 Go 之旅(exercise-stringer.go:https://tour.golang.org/methods/7)。 这是一些代码: type IPAddr
我在Java正则表达式中发现了一段令我困惑的代码: Pattern.compile( "J.*\\d[0-35-9]-\\d\\d-\\d\\d" ); 要编译的字符串是: String string
我在 ruby 代码上偶然发现了这个。我知道\d{4})\/(\d\d)\/(\d\d)\/(.*)/是什么意思,但是\1-\2-\3-\4 是什么意思? 最佳答案 \1-\2-\3-\4 是 b
我一直在努力解决这个问题,这让我很恼火。我了解 D 运行时库。它是什么,它做什么。我也明白你可以在没有它的情况下编译 D 应用程序。就像 XoMB 所做的那样。好吧,XoMB 定义了自己的运行时,但是
我有两个列表列表,子列表代表路径。我想找到所有路径。 List> pathList1 List> pathList2 当然是天真的解决方案: List> result = new ArrayList>
我需要使用 Regex 格式化一个字符串,该字符串包含数字、字母 a-z 和 A-Z,同时还包含破折号和空格。 从用户输入我有02-219 8 53 24 输出应该是022 198 53 24 我正在
目标是达到与this C++ example相同的效果: 避免创建临时文件。我曾尝试将 C++ 示例翻译为 D,但没有成功。我也尝试过不同的方法。 import std.datetime : benc
tl;dr:你好吗perfect forwarding在 D? 该链接有一个很好的解释,但例如,假设我有这个方法: void foo(T)(in int a, out int b, ref int c
有什么方法可以在 D 中使用abstract auto 函数吗? 如果我声明一个类如下: class MyClass { abstract auto foo(); } 我收到以下错误: mai
有没有人为内存中重叠的数组切片实现交集?算法在没有重叠时返回 []。 当 pretty-print (使用重叠缩进)内存中重叠的数组切片时,我想要这个。 最佳答案 如果您确定它们是数组,那么只需取 p
我已经开始学习 D,但我在使用 Andrei Alexandrescu 所著的 The D Programming Language 一书中提供的示例时遇到了一些麻烦。由于 int 和 ulong 类
如何创建一个不可变的类? 我的目标是创建一个实例始终不可变的类。现在我只是用不可变的方法和构造函数创建了一个“可变”类。我将其称为 mData,m 表示可变。然后我创建一个别名 alias immut
不久前我买了《The D Programming Language》。好书,很有教育意义。但是,我在尝试编译书中列出的语言功能时遇到了麻烦:扩展函数。 在这本书中,Andrei 写了任何可以像这样调用
我在 D http://www.digitalmars.com/d/2.0/lazy-evaluation.html 中找到了函数参数的惰性求值示例 我想知道如何在 D 中实现可能的无限数据结构,就像
这个问题在这里已经有了答案: 12 年前关闭。 Possible Duplicate: Could anyone explain these undefined behaviors (i = i++
当前是否可以跨模块扫描/查询/迭代具有某些属性的所有函数(或类)? 例如: source/packageA/something.d: @sillyWalk(10) void doSomething()
我是一名优秀的程序员,十分优秀!