How can I search or sort a cell array of vectors when the vectors have non-uniform length?

Hello,
I've been trying to sort a 1xN cell array of vectors by the first element in the vector, where the vectors do not have the same length, without using a for loop. This problem can be reduced to being able to return the first element in the vector at each row of the cell array.
Specifically, I have an undirected graph where each each vector in a cell array has the node as the first element, and all of the nodes it is connected to in the elements after that.
Example: If Node 1 is connected to node 2 and 4, and Node 3 is connected to node 4, an unsorted cell array A representing this is: A = {[1,2,4];[3,4];[2,1];[4,1,3]}
I want to find some method of searching for the row of cell array A corresponding to node 2.
I've tried using the command sortrows([A{:}]), but having non-uniform vectors forces cell2mat to convert the cell array to a single row.
Also, I've tried A{:}(1) and A(1:4){1} to only return the first column in the cell array, but this causes a "Bad cell reference operation" error.
Would anyone happen to know of some easy way to do this without a for loop?
Thanks, Dennis

댓글 수: 2

"return the first element in the vector at each row of the cell array"
>> cellfun( @(vec) vec(1), A )
ans =
1
3
2
4

댓글을 달려면 로그인하십시오.

 채택된 답변

Dennis Yeh
Dennis Yeh 2015년 5월 9일
편집: Dennis Yeh 2015년 5월 9일
From per isakson's response, answer became
function output = sortCell(input, col)
data = cellfun( @(vec) vec(col), input);
data = [data,(1:length(data))'];
data = sortrows(data)
output = input(data(:,2));
end

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Shifting and Sorting Matrices에 대해 자세히 알아보기

질문:

2015년 5월 8일

편집:

2015년 5월 9일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by