You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在dlib的matrix中追加列?调用set_colm方法未成功求助

在dlib中给矩阵追加列的正确方法

嘿,我懂你碰到的麻烦了——dlib里的matrix是固定尺寸的,set_colm()只能修改已经存在的列,根本没法直接给矩阵追加新列。你之前尝试的两种方法,要么直接替换了原有列,要么因为矩阵初始只有1列,索引1超出了有效范围(出现的异常结果其实是未定义行为,完全不是你想要的追加效果)。

下面给你两种可靠的解决方案:

方法1:手动创建新矩阵并复制数据

既然原矩阵大小固定,我们可以先创建一个行数和原矩阵一致、列数多1的新矩阵,再把原数据和新列分别复制进去:

#include <dlib/matrix.h>
using namespace dlib;

int main() {
    int dim = 2; 
    int dbsize = 1; 
    matrix<float> db(dim, dbsize); 
    // 初始化原矩阵
    db(0,0) = 0.840188;
    db(1,0) = 0.394383;

    // 定义要追加的列矩阵m
    matrix<float> m(dim, 1);
    m(0,0) = 0.62;
    m(1,0) = 0.4;

    // 创建新矩阵,列数+1
    matrix<float> new_db(dim, dbsize + 1);
    // 复制原矩阵的列到新矩阵的第0列
    set_colm(new_db, 0) = db;
    // 把新列m放到新矩阵的第1列(索引等于原列数)
    set_colm(new_db, dbsize) = m;

    // 现在new_db就是2行2列的矩阵,包含原数据和新列
    return 0;
}

方法2:用dlib内置的join_cols()函数(更简洁)

dlib提供了join_cols()函数,可以直接把两个同行数的矩阵按列拼接,返回一个新矩阵,省去手动复制的步骤:

#include <dlib/matrix.h>
using namespace dlib;

int main() {
    int dim = 2; 
    int dbsize = 1; 
    matrix<float> db(dim, dbsize); 
    db(0,0) = 0.840188;
    db(1,0) = 0.394383;

    matrix<float> m(dim, 1);
    m(0,0) = 0.62;
    m(1,0) = 0.4;

    // 直接拼接两列,得到新矩阵
    matrix<float> new_db = join_cols(db, m);
    return 0;
}

效果验证

操作后new_db的内容会是:

0.840188  0.62
0.394383  0.4

完全符合你想要的“追加一列”的需求。

注意事项

  • 要确保原矩阵和新列矩阵的行数完全一致,否则join_cols()或者手动复制都会出错;
  • 如果需要多次追加列,每次都要生成新矩阵,或者提前预估好最大列数,初始化一个足够大的矩阵,后续用set_colm()填充对应列。

内容的提问来源于stack exchange,提问作者azmath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:26:48