在 C 中将数组从 1D 重塑为 ND
Reshaping an array from 1D to ND in C
我在尝试自己实现这个时遇到了很多麻烦,所以如果有人能指出或描述一个算法,我将非常感激。
问题陈述
给定一维扁平指针 int* i
,看起来像这样 {1,2,3,4}
,并给出列表形式的维度列表 {2,2}
重塑一维数组以符合指定尺寸。总的来说,在这个过程之后,数组应该看起来像 {{1,2},{3,4}}
。
我基本上是在问是否有人知道numpy.reshape中使用的算法。
c中的n维数组只不过是计算简单数组内部偏移的语法糖,它们在内存中看起来是一样的(一个连续的块)。因此,"reshaping" 它真的没有意义,正如这个小示例所示:
#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
NumPy 不需要算法,因为它连续存储数据而不考虑形状。 "shape" 属性 是 reshape()
输入和输出之间的唯一区别。这些算法在稍后访问数组时发挥作用,例如在打印数组时。然后,您需要根据形状了解每一行或其他维度中有多少元素。
我在尝试自己实现这个时遇到了很多麻烦,所以如果有人能指出或描述一个算法,我将非常感激。
问题陈述
给定一维扁平指针 int* i
,看起来像这样 {1,2,3,4}
,并给出列表形式的维度列表 {2,2}
重塑一维数组以符合指定尺寸。总的来说,在这个过程之后,数组应该看起来像 {{1,2},{3,4}}
。
我基本上是在问是否有人知道numpy.reshape中使用的算法。
c中的n维数组只不过是计算简单数组内部偏移的语法糖,它们在内存中看起来是一样的(一个连续的块)。因此,"reshaping" 它真的没有意义,正如这个小示例所示:
#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
NumPy 不需要算法,因为它连续存储数据而不考虑形状。 "shape" 属性 是 reshape()
输入和输出之间的唯一区别。这些算法在稍后访问数组时发挥作用,例如在打印数组时。然后,您需要根据形状了解每一行或其他维度中有多少元素。