C语言实现数组[1*3*25*13*13]转换为[1*3*13*13*25]
时间: 2023-08-29 09:07:00 浏览: 28
可以使用嵌套循环对数组进行重排,具体实现代码如下:
```
int a[1][3][25][13][13]; // 原数组
int b[1][3][13][13][25]; // 目标数组
// 循环遍历原数组,将元素复制到目标数组
for(int i = 0; i < 1; i++) {
for(int j = 0; j < 3; j++) {
for(int k1 = 0; k1 < 25; k1++) {
for(int k2 = 0; k2 < 13; k2++) {
for(int k3 = 0; k3 < 13; k3++) {
b[i][j][k2][k3][k1] = a[i][j][k1][k2][k3];
}
}
}
}
}
```
这段代码可以实现将大小为[1*3*25*13*13]的数组转换为[1*3*13*13*25]的数组。
相关问题
C语言实现数组[75*13*13]转换为[1*3*25*13*13]
可以使用reshape函数将[75*13*13]的数组重塑为[1*3*25*13*13]的数组,代码如下:
import numpy as np
a = np.zeros((75, 13, 13))
b = a.reshape((1, 3, 25, 13, 13))
当然,这只是一种解决方法,具体实现方式可以根据实际情况进行调整。
C语言实现利用reshape函数将float型数组[3*25*13*13]转换成float型数组[3*13*13*25]
以下是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函数进行转换,最后打印出目标数组中的元素,以验证转换结果是否正确。