【问题标题】:How to load this kind of matrix in MATLAB如何在 MATLAB 中加载这种矩阵
【发布时间】:2012-08-28 23:52:55
【问题描述】:

我有一个upper triangular 矩阵,例如:

A=  load('A.txt');

1.0    3.32   -7.23
       1.00    0.60
               1.00

我想在 MATLAB 中加载它,因为这是对称的转换它做

a = A + triu(A, 1)'
所以最后我会有一个矩阵a

1.0    3.32   -7.23
3.32   1.00    0.60
-7.23  0.60    1.00

我遇到的问题是在加载时:

>> A = load('A.txt');
??? Error using ==> load
Number of columns on line 1 of ASCII file C:\A.txt
must be the same as previous lines.

有没有办法做到这一点?

【问题讨论】:

    标签: matlab file-io matrix


    【解决方案1】:

    尝试改用importdataload 通常只用于 .mat 文件。您的文件 A.txt 的结构如何?如果是这样的话,

    1.0    3.32   -7.23
    1.00    0.60
    1.00
    

    你会得到

    A = importdata('A.txt')
    
    A =
    
        1.0000    3.3200   -7.2300
        1.0000    0.6000       NaN
        1.0000       NaN       NaN
    

    所以你必须像这样移动最后两行

    A(2,:) = circshift(A(2,:),[0 1])
    A(3,:) = circshift(A(3,:),[0 2])
    
    A =
    
        1.0000    3.3200   -7.2300
        NaN       1.0000    0.6000
        NaN       NaN       1.0000
    

    然后将 NaN 替换为 0,并使用您的表达式创建一个对称矩阵。

    A(isnan(A)) = 0;
    
    a = A + triu(A, 1)';
    
    A =
    
        1.0000    3.3200   -7.2300
        3.3200    1.0000    0.6000
       -7.2300    0.6000    1.0000
    

    【讨论】:

    • @darkcminor:你是对的,请参阅我的更新答案。您对移位的概括是正确的,但我使矩阵对称的方法不是。新的答案应该会更好
    • 使用A(isnan(A)) = 0; a = A + triu(A, 1)'; 比使用A(isnan(A)) = A(isnan(A)'); 更有效吗我有一个问题 A(isnan(A)) = 0 会使下三角变为0,对吗?
    • 是的,A(isnan(A))=0 会将所有的 NaN 设置为 0。不确定效率,必须测试它,但我目前没有 Matlab。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多