【发布时间】:2023-03-03 04:26:01
【问题描述】:
我在创建矩阵的特定矩阵内存分配约束中工作:
float * matrix_data = (float *) malloc(rows * cols * sizeof(float));
我将这个矩阵存储在一个结构数组中,如下所示:
#define MAX_MATRICES 100
struct matrix{
char matrixName[50];
int rows;
int columns;
float* matrix_data;
};
typedef struct matrix matrix_t;
matrix_t our_matrix[MAX_MATRICES];
鉴于这种情况,我不是通过像MATRIX[SIZE][SIZE] 这样的二维数组来创建矩阵:以这种方式创建的两个矩阵相乘的正确方法是什么?
使用当前的实现,如果我想做减法之类的事情,我会这样做:
int max_col = our_matrix[matrix_index1].columns;
free(our_matrix[number_of_matrices].matrix_data);
our_matrix[number_of_matrices].data = (float *) malloc(our_matrix[matrix_index1].rows * our_matrix[matrix_index1].columns * sizeof(float));
float *data1 = our_matrix[matrix_index1].matrix_data;
float *data2 = our_matrix[matrix_index2].matrix_data;
int col, row;
for(col = 1; col <= our_matrix[matrix_index2].columns; col++){
for(row = 1; row <= our_matrix[matrix_index2].rows; row++){
our_matrix[number_of_matrices].matrix_data[(col-1) + (row-1) * max_col] =
(data1[(col-1) + (row-1) * (max_col)]) - (data2[(col-1) + (row-1) * (max_col)]);
}
}
这很简单,因为 matrix_index1 和 matrix_index2 的维度相同,并且它们返回的矩阵也具有相同的维度。
如何用这种矩阵构造方法实现矩阵乘法?
【问题讨论】:
-
你根本没有在计算中使用
i。这可能是它不起作用的原因。否则看起来就好了。 -
我确实担心我的错误实现可能会影响对问题的解释,类似于“为什么我的解决方案不起作用”,而事实上我在问 - “什么有效?”我将删除我的尝试并再次询问。
-
请出示
our_matrix声明。不是float*。 -
@KamilCuk 抱歉,我已重命名并添加以更清晰
-
使用浮点数的扁平数组使代码变得不必要地复杂。您应该定义一个二维数组以使编码和理解更容易