MATLAB: How to add some symbols into a matrix

waiting for your comments

In fact , I have a Matrix like X =
0 5.2 4.8 28.8
0 0 1.0 33.8
0 0 0 33.4
0 0 0 0
I would like to create like this
0 5.2 4.8 28.8
NaN 0 1.08 33.8
NaN NaN 0 33.4
NaN NaN NaN 0
I wrote something like this, but it does not work very well. because I would like to keep the first column and first row zero value, the second column second row zero value and so on
[m,n]=size (X) for i=1:m; for j=1:n; if X(i,j)==0 X(i,j)= NaN ; end end end

Best Answer

  • It depends on what you want to do with this matrix. If you just want it to be displayed nicely:
    classdef partmat < double
    methods
    function obj = partmat(data)
    if nargin < 1
    data = [];
    end
    validateattributes(data, {'numeric'}, {'2d'})
    obj = obj@double(data);
    end
    function disp(obj)
    for irow = 1:size(obj, 1)
    for icolumn = 1:size(obj, 2)
    if ~isnan(obj(irow, icolumn))
    x = num2str(obj(irow, icolumn));
    else
    x = '--';
    end
    fprintf(['\t', x]);
    end
    fprintf('\n');
    end
    end
    end
    end
    Example:
    >> x = partmat(magic(5))
    x =
    17 24 1 8 15
    23 5 7 14 16
    4 6 13 20 22
    10 12 19 21 3
    11 18 25 2 9
    >> x(3) = nan
    x =
    17 24 1 8 15
    23 5 7 14 16
    -- 6 13 20 22
    10 12 19 21 3
    11 18 25 2 9
    If you want to get even fancier you could overload subsassgn and allow notation like
    x(5) = '--'