How to populate a cell array with vector elements?
28 次查看(过去 30 天)
显示 更早的评论
I have a cell array consisting of n-number of cells, each of different size. I also have a vector consisting of n-number of elements. I'd like to populate the cells with the corresponding elements from the vector.
1 个评论
Jan
2017-7-4
编辑:Jan
2017-7-4
Is this a homework question? If it is: Sorry for posting the easy solution. Note that providing it as your solution would be a kind of cheating. If you ask a homework question, clarify this detail such that the answer can be formulated as hints and you have the chance to solve it by your own.
采纳的回答
Jan
2017-7-4
编辑:Jan
2017-7-4
What have you tried so far? This is easy with a loop:
C = {ones(1, 3); ones(1, 7); ones(1, 5)};
x = [3; 5, 7];
for k = 1:numel(C)
C{k} = C{k} * x(k);
end
There are some alternatives, which might be needed, if this is a homework question. Hint:
index = [1,1,1];
value = 8;
value(index)
更多回答(2 个)
Jan
2017-7-4
I have a cell array consisting of n-number of cells
I assume this means:
n = 17;
C = cell(1, n);
But what does this mean:
each of different size.
? A short explanation would avoid to let the readers guess.
I also have a vector consisting of n-number of elements.
Perhaps this is:
x = rand(1, n)
and
I'd like to populate the cells with the corresponding elements from the vector.
might mean:
for k = 1:numel(C)
C{k} = x(k);
end
Or easier:
C = num2cell(x);
Does this help? If not explain what "each of different size" means.
Guillaume
2017-7-4
Assuming you want to append the elements of your vector to vectors in the corresponding cells of your cell array:
result = arrayfun(@(c, el) [c{1}, el], yourcellarray, yourvector, 'UniformOutput', false);
The above assumes that the vectors in the cell arrays are row vectors. If they are column vectors, then it's [c{1}; el]
6 个评论
Jan
2017-7-4
@Yerzhigit Bapin: Do you see that an answer is much easier now after you have explained the wanted procedure clearly?
Guillaume
2017-7-4
OH, that certainly wasn't clear from the initial question.
A one-liner solution:
result = arrayfun(@(c, el) repmat(el, size(c{1})), yourcellarray, yourvector, 'UniformOutput', false);
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!