python - 用数组索引 Numpy 数组

标签 python arrays numpy

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

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

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

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

状态=历史[延迟,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/

相关文章:

python - 循环 float 范围

python - 具有多个值到元组的字典

python - scrapy,如何向表单发送多个请求

python - 为什么 int 列表在 python 3.7 及更高版本中没有得到转换,但在 python 2.7 上有效?

python - 使用变量而不是文字时出现断言错误

java - ID检查char方法?

javascript - 遍历对象数组时出现 TS 错误

ios - 如何在特定索引处将数组插入现有NSMutableArray中

python - 如何有效地(就地)乘以不同大小的 memmaped numpy 数组的两个 View

numpy - 从 pandas.DataFrame 绘制引导样本