如何将矩阵与未对齐元素相加?

时间:2017-02-13 23:19:42

标签: matlab matrix

我试图在第二维中总结Matlab中的矩阵QI。诀窍是,列包含一系列递增的数字,但并非所有列都具有相同数量的元素(即,数字(QI(:,1))〜=数字(QI(:,2))等等。为了清楚起见,我附上了它的图片。请注意,我用0填充缺失区域,因此先前的条件变为nnz(QI(:,1))〜= nnz(QI(:,2))。

Matrix QI

我想到的一个初始策略是将其视为图像并为每个不同的渐变级别构建一个蒙版,但这似乎是一项单调乏味的工作。

Colored QI

任何人都有更好的想法如何做到这一点?我还应该提一下,我能够自由地修改QI的生成方式,但如果有解决方案,我宁愿不这样做。

编辑:

希望新的彩色图像能够更好地理解。

仅供参考,每列先前都存储在没有尾随零的单元格数组中。然后我逐个提取列并将它们存储在矩阵中以执行求和,只要长度不相同就填充额外的零。

通常这些列数据应该具有相同的行数,但有时情况并非如此,更糟糕的是,它们没有正确对齐。

我开始认为重写生成单元格数组的代码而不是这个矩阵是否更好。想法?

谢谢,

1 个答案:

答案 0 :(得分:0)

编辑:在您发表评论之后,我修改了答案。请注意,您的数据无法真正对齐"因为他们没有相同数量的价值。

一种方法是使用细胞作为测量的存储。

    <?php

if( $_POST ){

    $to = "us@ourcompany.com";

    $subject = "query from calculator form";    

    $fields = $_POST['a1_gro_sal'] . ' ' . $_POST['a1_gro_add'] . ' ' . $_POST['a2_gro_sal'] . ' ' . $_POST['a2_gro_add']  . ' ' . $_POST['f_name'] . ' ' . $_POST['l_name'] . ' ' . $_POST['email'] . ' ' . $_POST['phone'];   


    $gross1 = $_POST['a1_gro_sal'];
    $gross2 = $_POST['a1_gro_add'];
    $gross3 = $_POST['a2_gro_sal'];
    $gross4 = $_POST['a2_gro_add'];
    $fname = $_POST['f_name'];
    $lname = $_POST['l_name'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];

    $send = mail($to, $subject, $fields);

    ?>

    <table class="table table-striped" border="0">

    <tr>
    <td colspan="2">
     <div class="alert alert-info">
      <strong>Success</strong>, Form Submitted Successfully...
     </div>
    </td>
    </tr>

    <tr>
    <td>First Name</td>
    <td><?php echo $fname ?></td>
    </tr>

    <tr>
    <td>Last Name</td>
    <td><?php echo $lname ?></td>
    </tr>

    <tr>
    <td>Your eMail</td>
    <td><?php echo $email; ?></td>
    </tr>

    <tr>
    <td>Contact No</td>
    <td><?php echo $phone; ?></td>
    </tr>

    </table>
    <?php}

现在,您可以对单元格内的向量的最后一个元素进行求和

valueMissing   =  0; % here you can put the defauld value you want

% transform you matrix in a cell
QICell = arrayfun(@(x) QI(QI(:,x)!=valueMissing,x), 1:size(QI,2),'UniformOutput', false);

或者对矢量进行重新排序,以便最后一个元素与#34;对齐&#34;

QIsum = sum(cellfun(@(x) x(end), QICell))

然后你可以赚取所有可能的金额:

QICellReordered = cellfun(@(x) x(end:-1:1),QICell, 'UniformOutput',false);

我希望这有帮助!