MATLAB - 从该行

我有一个在第一列中重复值的矩阵查找列和提取值的重复值,例如:MATLAB - 从该行

A = [ 

1 34 463;

2 45 684;

2 23 352;

3 31 256;

1 46 742;

4 25 234]

使用A,我期待从数据中提取第一列中每个值的第二列输出B。如果第一列中的值发生重复,则第二列中的相应值将放入另一个输出列(在不发生重复的情况下可以使用NaNs)。例如:

B = [ 

1 34 46;

2 45 23;

3 31 NaN;

4 25 NaN]

(在B的第一列是没有必要的,但这里包含澄清)

我试图使用的查找功能,if语句和循环组合,但没有成功。理想情况下,成功的方法也是有效的,因为实际的数据集很大。

我使用版本R2012a。请指教。

回答:

您可以使用cell-arrays来解决这类问题。当所有列或所有行的长度不相等时使用单元格数组。每行/列可以有不同的大小。他们不需要填充来使它们大小相等。

一个使用accumarray

[~,~,idx] = unique(A(:,1)); 

outC = accumarray(idx,A(:,2),[],@(x) {x.'}) %//'

%// If you want the outputs in sorted order use the following code instead

%// outC = accumarray(idx,A(:,2),[],@(x) {sort(x).'})

outC =

[1x2 double]

[1x2 double]

[ 31]

[ 25]

你可以如果你想一次查看整个矩阵使用语法这样outC{1}

>> outC{1} 

ans =

46 34

访问每个细胞的方法,你可以使用celldisp功能

>> celldisp(outC) 

outC{1} =

46 34

outC{2} =

23 45

outC{3} =

31

outC{4} =

25

如果你想要得到的输出NaN填充基质的替代电池阵列,你可以做这样的事情(你上面得到outC后):

方法使用bsxfuncellfun

lens = cellfun(@numel,outC); 

maxSize = max(lens);

out = nan(maxSize,numel(outC));

mask = bsxfun(@le,(1:maxSize).',lens(:).')

out(mask) = horzcat(outC{:});

out = out.'

输出:

out = 

46 34

23 45

31 NaN

25 NaN

如果使用替代方法(输出排序)来查找outC,结果将会是b E:

out = 

34 46

23 45

31 NaN

25 NaN

回答:

这将是一个方法 -

[~,~,idx] = unique(A(:,1),'stable') %// Find IDs for each element from col-1 

[~,sorted_idx] = sort(idx) %// Get sorted IDs

grp_vals = A(sorted_idx,2) %// Get second column elements grouped together

grp_lens = accumarray(idx,1)%// Find Group lengths

%// Create a mask for a 2D array where the ones are places where grouped

%// elements are to be put.

mask = bsxfun(@le,[1:max(grp_lens)]',grp_lens(:).')

%// Create a nan filled array of same shape as mask and finally fill masked

%// places with grouped elements. Transpose at the end to get desired output.

out = nan(size(mask))

out(mask) = grp_vals

out = out.'

采样运行 -

>> A,out 

A =

1 34 463

2 45 684

0 23 352

-3 31 256

1 46 742

4 25 234

1 12 99

-3 -20 56

out =

34 46 12

45 NaN NaN

23 NaN NaN

31 -20 NaN

25 NaN NaN

以上是 MATLAB - 从该行 的全部内容, 来源链接: utcz.com/qa/263525.html

回到顶部