C语言实现利用reshape函数将float型数组[3*25*13*13]转换成float型数组[3*13*13*25]
时间: 2023-09-08 10:16:29 浏览: 248
C语言中数组的运算
5星 · 资源好评率100%
以下是C语言实现的代码:
```c
#include <stdio.h>
void reshape(float *src, float *dst, int n, int h, int w, int c) {
int i, j, k, l;
for (i = 0; i < n; i++) {
for (j = 0; j < h; j++) {
for (k = 0; k < w; k++) {
for (l = 0; l < c; l++) {
dst[l * h * w * n + k * h * n + j * n + i] = src[i * h * w * c + j * w * c + k * c + l];
}
}
}
}
}
int main() {
float src[3*25*13*13], dst[3*13*13*25];
int i, j, k, l;
for (i = 0; i < 3; i++) {
for (j = 0; j < 25; j++) {
for (k = 0; k < 13; k++) {
for (l = 0; l < 13; l++) {
src[i * 25 * 13 * 13 + j * 13 * 13 + k * 13 + l] = i * j * k * l;
}
}
}
}
reshape(src, dst, 3, 13, 13, 25);
for (i = 0; i < 3; i++) {
for (j = 0; j < 13; j++) {
for (k = 0; k < 13; k++) {
for (l = 0; l < 25; l++) {
printf("%f ", dst[i * 13 * 13 * 25 + j * 13 * 25 + k * 25 + l]);
}
}
}
}
return 0;
}
```
首先定义了一个reshape函数,该函数接收一个源数组和一个目标数组,以及四个维度的大小n、h、w、c。在函数中进行四重循环,将源数组中的元素按照指定顺序复制到目标数组中。具体来说,对于源数组中的第(i, j, k, l)个元素,它会被复制到目标数组中的第(l, k, j, i)个元素。在主函数中,首先初始化源数组,然后调用reshape函数进行转换,最后打印出目标数组中的元素,以验证转换结果是否正确。
阅读全文