Armadillo转置复数列向量时print方法输出虚部为负值问题咨询
结论
该现象是接口使用认知偏差导致,不是Armadillo库的bug。
原因说明
Armadillo对复数类型的转置操作做了明确的语义区分,适配线性代数领域的通用约定:
.t()方法实现的是 共轭转置(Hermitian转置):对于复数元素,除了交换行列维度,还会对每个元素取共轭(即虚部取反),这是复数域线性代数运算中最常用的转置语义,也是库的默认实现。- 如果仅需要做维度层面的纯转置、不修改元素本身的值,需要调用
.st()(simple transpose,简单转置)方法。
代码中对复数列向量直接调用.t(),得到的是原向量的共轭转置行向量,打印出虚部为原值相反数的结果完全符合接口设计预期。
修正示例
将原代码中调用.t()打印转置行向量的部分替换为.st()即可得到预期输出:
#include <iostream> #include <armadillo> int main() { arma::Col<std::complex<float>> v1 = {{1.0, 1.5}, {2.0,2.5}, {3.0,3.5}, {4.0,4.5}}; v1.st().print("v1纯转置:"); v1.print("v1原向量:"); return 0; }
修正后运行输出为:
v1纯转置: (+1.000e+00,+1.500e+00) (+2.000e+00,+2.500e+00) (+3.000e+00,+3.500e+00) (+4.000e+00,+4.500e+00) v1原向量: (+1.000e+00,+1.500e+00) (+2.000e+00,+2.500e+00) (+3.000e+00,+3.500e+00) (+4.000e+00,+4.500e+00)
内容的提问来源于stack exchange,提问作者Ethan Brown
相关产品推荐
相关产品推荐

