gpt4 book ai didi

python - 用数组索引 Numpy 数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:21:01 24 4
gpt4 key购买 nike

这个问题比用实际代码寻找解决方案要抽象一些。我正在尝试理解我正在使用的某些软件的一些代码。具体来说,我正在使用一个由 3 个其他 3D 数组索引的 4D numpy 数组。我已阅读以下页面:http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html然而,它并没有真正涵盖我正在处理的事情的复杂性(或者我不完全理解将它应用到我的情况)。

我的最终目标是将此代码转换为 C 代码,因此我需要了解如何访问这些数组,以便我可以转换它。有谁知道使用 3D 数组索引读取这些 numpy 数组的任何技巧或提示?我可以遵循一些程序在 C 中重建 numpy 数组吗?

如有任何帮助,我们将不胜感激!

作为引用,以下是我正在处理的内容:

state = history[延迟,var,节点,:]

history.shape = (4192, 2, 74, 1)

delays.shape = (74,1,74)

var.shape = (74,1,74)

node.shape = (74,1,74)

节点矩阵其实就是[[[ 0 0 0...00]] [[ 1 1 1 ... 1 1]] [[ 2 2 2 ... 2 2]] ... [[73 73 73 ... 73 73 ]]]var 矩阵全为 0。延迟矩阵是所有取模 4192 的各种值的整数。

谢谢!

最佳答案

结果数组的形状为 (74, 1, 74, 1)。查看 delays 数组的内容会很有趣:它真的有 5476 个不同的值,还是只有 74 个不同的值重复了 74 次?我问,因为这实际上是 varnode 发生的事情。

如果它们都不同,则同一索引的未优化 C 版本将如下所示:

float history[4192][2][74][1], state[74][1][74][1];
int delays[74][1][74];

for (int j = 0; j < 74; j++) {
for (int k = 0; k < 74; k++) {
state[j][k] = history[delays[j][0][k]][0][k][0];
}
}

如果 delays 不是真正的二维数组,而是并排重复 74 次的一维数组,即如果 np.all(np.equal.reduce(delays, axis=1 ))返回True,那么可以将上面的代码简化如下:

float history[4192][2][74][1], state[74][1][74][1];
int delays[74]; /* keep only the unique values */

for (int j = 0; j < 74; j++) {
for (int k = 0; k < 74; k++) {
state[j][k] = history[delays[j]][0][k][0];
}
}

关于python - 用数组索引 Numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21248886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com