如何在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
相关产品推荐
相关产品推荐

