C实现numpy的reshape
时间: 2024-03-16 07:37:17 浏览: 125
C语言中实现类似于NumPy库中的reshape函数可以使用动态内存分配和指针操作来实现。具体实现方法如下:
```c
#include <stdio.h>
#include <stdlib.h>
int* reshape(int* arr, int rows, int cols, int new_rows, int new_cols) {
if (rows * cols != new_rows * new_cols) {
printf("Error: The new shape is not compatible with the original shape.\n");
return NULL;
}
int* new_arr = (int*)malloc(new_rows * new_cols * sizeof(int));
int* p = new_arr;
for (int i = 0; i < new_rows; i++) {
for (int j = 0; j < new_cols; j++) {
int index = i * new_cols + j;
int row = index / cols;
int col = index % cols;
*(p + i * new_cols + j) = *(arr + row * cols + col);
}
}
return new_arr;
}
```
上述代码中,reshape函数接受一个一维数组arr和两个整数rows和cols,表示原始数组的行数和列数。函数还接受两个整数new_rows和new_cols,表示新数组的行数和列数。函数首先检查新形状是否与原始形状兼容,如果不兼容,则返回NULL。否则,函数使用动态内存分配来创建新数组,并使用指针操作将原始数组中的元素复制到新数组中。最后,函数返回新数组的指针。
阅读全文