Vectorized generation of a cell
2 次查看(过去 30 天)
显示 更早的评论
x = 1 : a; y = 1 : b; z(x,y) = {randperm(d,2)}; a non-repeating cell is desired. No for loops please.
2 个评论
采纳的回答
Matt J
2023-12-22
编辑:Matt J
2023-12-22
There is no way to create or manipulate cells without for-loops. Things like mat2cell, num2cell, etc... all have for-loops inside them. So do things like cellfun, arrayfun, etc...
It is not clear why you would want a cell array. Your data can be stored in an a-by-b-by-2 array.
a=5; b=3; d=7;
I=nchoosek(1:d,2);
I=[I;fliplr(I)];
r=randi(height(I),a*b,1);
z= reshape(I(r,:) ,a,b,2)
11 个评论
Matt J
2023-12-23
It must be a cell. If there is no way, then I have to use for loops.
If you don't care about avoiding for-loops anymore, you can take the result of my proposed code and convert it to a cell with num2cell:
a=5; b=3; d=7;
I=nchoosek(1:d,2);
I=[I;fliplr(I)];
r=randi(height(I),a*b,1);
z= reshape( num2cell(I(r,:),2) ,a,b)
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!