MATLAB Answers

could anyone help me how to convert double to cell in an array

2 ビュー (過去 30 日間)
jaah navi
jaah navi 2021 年 7 月 16 日
コメント済み: jaah navi 2021 年 7 月 17 日
I am having a cell array A in the folllowing manner
where
A=3x1 cell
2x3 double - [1,1,1 - 1st row
1,2,2]- 2nd row
2x3 double - [1,2,2 -1st row
1,1,1] -2nd row
2x3 double - [1,1,2 - 1st row
1,2,2] -2nd row
now, I want to convert A into B as given below
B=3x1 cell
2x1cell - [1,2,3] 1st row
[1] [2,3] 2nd row
2x2 cell -[1] [2,3] 1st row
[1,2,3] 2nd row
2x2 cell -[1,2] [3] 1st row
[1] [2,3] 2nd row
i.e.,
A=3x1 cell to B=3x1 cell
2x3 double - [1,1,1 to 2x1cell - [1,2,3]
1,2,2] to [1] [2,3]
2x3 double - [1,2,2 to 2x2 cell -[1] [2,3]
1,1,1] to [1,2,3]
2x3 double - [1,1,2 to 2x2 cell - [1,2] [3]
1,2,2] to [1] [2,3]
Could anyone please help me on this to do it on a general manner as my cell array size is larger.
  3 件のコメント
Stephen
Stephen 2021 年 7 月 17 日
jaah navi's incorrectly posted "Answer" moved here:
As mentioned
My
B is {} 1x1 cell
which contains
3x5 double as
1 1 2 3 4
1 2 3 3 4
1 2 2 3 4
Now I want to have
A as {} 1x1 cell
which contains
3x4 cell
as
[1,2] 3 4 5
1 2 [3,4] 5
1 [2,3] 4 5
I have also attached the mat file which I required for your reference

サインインしてコメントする。

回答 (1 件)

Image Analyst
Image Analyst 2021 年 7 月 17 日
@jaah navi, why do you want to do this quirky thing anyway? What's the use case? Homework? Or is there some real world application?
This will do it:
s = load('required.mat')
Adesired = s.A
B = s.B
celldisp(Adesired)
celldisp(B)
% Find the size of the input array.
[rows, columns] = size(B{1})
% Make an output A that is the same size
% in case there are no repeated integers in B
A = cell(rows, columns)
% Scan B putting numbers into the right place in A
dblB = B{1};
for row = 1 : rows
thisRow = dblB(row, :);
for col = 1 : columns
if col > length(thisRow)
% thisRow got shortened so it no longer has as many columns as B.
continue;
end
vec = thisRow(col);
counter = 1;
while (col + counter) <= length(thisRow) && dblB(row, col) == thisRow(col + counter)
% Make a 2 element vector with the first number and the next different number.
index = min([length(thisRow), col+counter+1]); % Don't go past end of row!
vec = [thisRow(col) , thisRow(index)];
counter = counter + 1;
end
% If the vector has 2 elements, we need to shorten thisRow by one column.
if length(vec) >= 2
thisRow(col) = [];
end
A{row, col} = vec;
end
end
% Show in command window
A
% Crop off any columns in A that are all empty.
% Note: there might be a better way than a for loop but at least this is simple and understandable.
columnsToDelete = false(1, columns);
for col = columns : -1 : 1
deleteThisColumn = true; % Initialize.
for row = 1 : rows
if ~isempty(A{row, col})
deleteThisColumn = false; % Mark this column for keeping.
continue;
end
end
columnsToDelete(col) = deleteThisColumn; % Either true to delete, or false to keep.
end
% Do the deletion here, and show result in the command window.
A(:, columnsToDelete) = []
It shows:
A =
3×4 cell array
{[1 2]} {[ 2]} {[ 3]} {[4]}
{[ 1]} {[ 2]} {[3 4]} {[4]}
{[ 1]} {[2 3]} {[ 3]} {[4]}
  4 件のコメント
jaah navi
jaah navi 2021 年 7 月 17 日
The reason for converting B into A is I am implementing B in machine learning to train the model.
Once the model is trained I want to compute the throughput for B.
To compute the throughput I want B to convert into A as mentioned to get the code to execute the code to compute the throughput.
As for computing the throughput it requires A as the format i need to to the conversion.
I hope it clarifies. If not please let me know.

サインインしてコメントする。

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by