0

我在尝试自己实现这一点时遇到了很多麻烦,所以如果有人能指出或描述一种算法,我将非常感激。

问题陈述

int* i给定看起来像这样的一维扁平指针{1,2,3,4},并以列表形式给出维度列表,{2,2}重塑一维数组以符合指定维度。整个过程之后,数组应该看起来像{{1,2},{3,4}}

我基本上是在问是否有人知道 numpy.reshape 中使用的算法。

4

2 回答 2

3

中的 n 维数组只不过是计算简单数组内偏移量的语法糖,它们在内存中看起来是一样的(一个连续的块)。因此,“重塑”它真的没有意义,正如这个小示例所示:

#include <stdio.h>

int data[] = {1,2,3,4};

int main(void)
{
    int *i = data;

    for (int n = 0; n < 4; ++n)
    {
        printf("i[%d] = %d\n", n, i[n]);
    }

    int (*j)[2] = (void *)i;

    for (int n1 = 0; n1 < 2; ++n1)
    {
        for (int n2 = 0; n2 < 2; ++n2)
        {
            printf("j[%d][%d] = %d\n", n1, n2, j[n1][n2]);
        }
    }

    return 0;
}

输出:

i[0] = 1
i[1] = 2
i[2] = 3
i[3] = 4
j[0][0] = 1
j[0][1] = 2
j[1][0] = 3
j[1][1] = 4

于 2017-05-17T14:02:10.873 回答
0

NumPy 不需要算法,因为它连续存储数据而不管形状如何。“形状”属性是输入和输出之间的唯一区别reshape()。这些算法在以后访问数组时起作用,例如在打印时。然后您需要按照形状来了解每行或其他维度中有多少元素。

于 2017-05-17T14:03:18.167 回答