Replacing a cell array column with another cell array column (conversion to cell from double is not possible)
26 views (last 30 days)
Show older comments
Background:
A is a 1x51 cell - containing 51 Mx6 cells.
Snippet:
B is a 1x51 cell - containing 51 Mx1 doubles.
Snippet:
I want to remove columns 4 and 5 from all 51 cells of A and replace them with the column vectors located in B. So in A{1,1}(:,4:5) is replaced with B{1,1} (B being a cell of column vectors), in A{1,2}{:,4:5} is replaced with B{1,2}.
Since B is doubles and A is cells I can't simply do this:
A{1,1}(:,4) = B{1,1};
A{1,1}(:,5) = [];
Conversion to cell from double is not possible.
>>>>>
Error in IMPORT (line 129)
A{1,1}(:,4)=B{1,1};
So my question is: how do I go about replacing those columns and then how do I loop it through the whole of A to replace each cell's columns? (I'm assuming this can be done using something like cellfun?)
Thanks in advance.
0 Comments
Accepted Answer
Image Analyst
on 27 Nov 2014
Let's look at what
A{1,1}(:,4) = B{1,1};
actually is. A{1,1} is taking the upper left cell in the 1 by 51 cell array, in other words the first cell since it's a row vector. Since you used braces, you're extracting the cell contents rather than referring to the cell itself. But the cell contents is yet another cell array! It's a cell array of 111 rows of cells by 6 columns of cells. So when you say A{1,1}(:,4), you're taking all the rows in column 4 of that 6 column cell array. So now you have a column vector of cells that is 111 cells tall. Inside each of those 111 cells is a double array, but the expression itself is a column of cells, not doubles , and therein lies the problem.
Now, let's look at B{1,1}. You're using braces so you're extracting the contents of the upper left cell of the B cell array. The contents of that cell is a 111 by 1 column vector of doubles.
Knowing this, and after reading the FAQ, take another crack at it.
2 Comments
Image Analyst
on 27 Nov 2014
If Guillaume's solution doesn't do it, then please attach a mat file so we can try some things.
More Answers (1)
Guillaume
on 27 Nov 2014
As Image Analyst said, you're trying to replace cells with a matrix, so first you need to convert that matrix into cells:
A = {cell(111,6), cell(50,6), cell(53,6), cell(74,6), cell(120,6)};
B = {rand(111,1), rand(50,1), rand(53,1), rand(74,1), rand(120,6)};
for col = 1:numel(A)
A{col}(:, 4) = num2cell(B{col});
A{col}(:, 5) = [];
end
4 Comments
See Also
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!