Matlab 如何用未对齐的元素求和矩阵?

Matlab 如何用未对齐的元素求和矩阵?,matlab,matrix,Matlab,Matrix,我试图在Matlab中对二维矩阵QI求和。诀窍是,列包含一系列递增的数字,但并非所有列都具有相同数量的元素(即numel(QI(:,1))~=numel(QI(:,2))等等)。为了清楚起见,我附上一张照片。注意,我用0填充了缺少的区域,因此前面的条件变成nnz(QI(:,1))~=nnz(QI(:,2)) 我最初想到的一个策略是将其视为一个图像,并为每个不同的渐变级别构建一个遮罩,但这似乎是一项乏味的工作 有谁对如何做到这一点有更好的想法吗?我还应该提到,我可以自由地修改QI的生成方式,但

我试图在Matlab中对二维矩阵QI求和。诀窍是,列包含一系列递增的数字,但并非所有列都具有相同数量的元素(即numel(QI(:,1))~=numel(QI(:,2))等等)。为了清楚起见,我附上一张照片。注意,我用0填充了缺少的区域,因此前面的条件变成nnz(QI(:,1))~=nnz(QI(:,2))

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

有谁对如何做到这一点有更好的想法吗?我还应该提到,我可以自由地修改QI的生成方式,但我不希望这个问题有解决方案


编辑:

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

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

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

我开始思考,是否应该重新编写生成单元数组的代码,而不是这个矩阵。想法


谢谢,

编辑:根据您的评论,我修改了答案。请注意,您的数据不能真正“对齐”,因为它们的值不相同

一种方法是使用一个单元格作为测量值的存储

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);
现在您可以对单元内向量的最后一个元素求和

QIsum = sum(cellfun(@(x) x(end), QICell))
或者重新排列向量,使最后一个元素“对齐”

然后,您可以计算所有可能的总和:

m = min(cellfun(@numel, QICellReordered));
QIsum = zeros(m,1);

for i=1:m
    QIsum(i) = sum(cellfun(@(x) x(i), QICellReordered));
end

% reorder QISum to your original order
QIsum = QIsum(end:-1:1);

我希望这有帮助

那有什么问题?对行求和(或者你的意思是在第一维度求和?),零元素对和没有贡献。我会这么做的,除非它不能解决问题。我将尝试重新格式化它。是的,您需要更改转换数据的方式。根据单元阵列的结构,您甚至可能不必创建完整的矩阵,但如果没有更多信息,就无法知道。谢谢您的回答,但恐怕这是第二维(即从左到右)。我将重新表述这个问题。
m = min(cellfun(@numel, QICellReordered));
QIsum = zeros(m,1);

for i=1:m
    QIsum(i) = sum(cellfun(@(x) x(i), QICellReordered));
end

% reorder QISum to your original order
QIsum = QIsum(end:-1:1);