【darknet源码解析-04】matrix.h 和 matrix.c

本文档深入解析darknet框架中matrix.h和matrix.c的源码,涵盖基础数据结构list及其在矩阵操作中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本系列为darknet源码解析,本次解析src/matrix.h 与 src/matrix.c 两个。

matrix.h 中的包含的代码如下:

#ifndef MATRIX_H
#define MATRIX_H
#include "darknet.h"

// 将矩阵m中的数据拷贝到内存中
matrix copy_matrix(matrix m);
// 可视化
void print_matrix(matrix m);

//从矩阵中采样m行数据,返回采样后的结果;
matrix hold_out_matrix(matrix *m, int n);

// 矩阵的行数和列数进行resize操作,resize矩阵大小是size * size
matrix resize_matrix(matrix m, int size);
//获取矩阵中某一列数据,并把该列删除掉
float *pop_column(matrix *m, int c);

#endif

首先,我们分析matrix.h 中的源码,基础数据结构list 定义在 darknet.h 中,其定义如下:

typedef struct matrix{
    int rows, cols; // 行数,列数
    float **vals; // 二维float数组
} matrix;

 matrix.c 中函数的详细分析如下,

#include "matrix.h"
#include "utils.h"
#include "blas.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <math.h>


/**
 * 释放矩阵的存储空间
 * @param matrix 待释放存储空间矩阵 m
 */
void free_matrix(matrix m)
{
    int i;
    // 逐行释放存储空间;
    for(i = 0; i < m.rows; ++i) free(m.vals[i]);
    free(m.vals);
}


/**
 * emmm...... 暂时不能理解这波操作,先空在这里,看上层怎么用???
 * @param truth 矩阵
 * @param guess
 * @param k 取top的个数
 * @return 查找的准确率
 */

float matrix_topk_accuracy(matrix truth, matrix guess, int k)
{
    // 申请k个int类型存储空间,
    int *indexes = calloc(k, sizeof(int));
    int n = truth.cols;// n 保存truth矩阵的列数
    int i,j;
    int correct = 0;
    for(i = 0; i < truth.rows; ++i
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值