我们有一个M = [10 x 4 x 12]
矩阵.作为例子,我采取M(:,:,4)
:
val(:,:,4) =
0 0 1 0
0 1 1 1
0 0 0 1
1 1 1 1
1 1 0 1
0 1 1 1
1 1 1 1
1 1 1 1
0 0 1 1
0 0 1 1
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到这个:
val(:,:,4) =
0 0 3 0
0 2 2 2
0 0 0 4
1 1 1 1
1 1 0 1
0 2 2 2 …
Run Code Online (Sandbox Code Playgroud) 有替代品randi
,我需要唯一的整数值.使用randi
该PianoSperimentale
矩阵可包含重复整数值.
lover_bound = 10;
upper_bound = 180;
steps = 10;
NumeroCestelli = 8;
livello = [lover_bound:steps:upper_bound];
L = length(livello);
n_c = 500 000
NumeroCestelli = 8
randIdxs = randi([1,L],n_c,NumeroCestelli);
PianoSperimentale = single(livello(randIdxs));
Run Code Online (Sandbox Code Playgroud)
替代方案需要快速并支持非常大的矩阵.在过去我使用这个:
[PianoSperimentale] = combinator(L,NumeroCestelli,'c','r');
for i=1:L
PianoSperimentale(PianoSperimentale==i)=livello(i);
end
Run Code Online (Sandbox Code Playgroud)
但是太慢而痛苦.(见组合者)
参考reshape row wise w /不同的开始/结束元素数 @Divakar带来了一个很好的解决方案但是,如果列数不总是相同怎么办?
样品运行 -
>> A'
ans =
4 9 8 9 6 1 8 9 7 7 7 4 6 2 7 1
>> out
out =
4 9 8 9 0 0
6 1 8 9 7 7
7 4 6 2 7 1
Run Code Online (Sandbox Code Playgroud)
我只拿了A的前4个项并把它们放进去,然后用剩下的2个空单元填充0.所以ncols = [4 6 6]
.不幸的是vet2mat
,不允许矢量作为列号.
有什么建议?