我尝试为2D数组的前2维分配值,同时保持第三维的固定。但是我收到了一个错误。
Assignment has fewer non-singleton rhs dimensions than non-singleton subscripts
请参阅下面的代码段(请注意,我使用here中的allcomb())。
知道为什么以及如何解决?
A = zeros(2, 94, 10);
combs = allcomb(1:2,1:94);
A(combs(:,1), combs(:,2), 1) = 1:(2*94);
请注意,我的目的是编写一个矢量化形式:
A = zeros(2, 94, 10);
combs = allcomb(1:2,1:94)
vals = 1:(2*94);
for k=1:length(vals)
A(combs(k,1), combs(k,2), 1) = vals(k);
end
答案 0 :(得分:0)
等式的rhs
右侧需要具有与lhs
相同的维度。在这种情况下,您尝试将N x 1
向量分配给2 x N x 1
数组。
尝试,
A = zeros(2, 94, 10);
combs = allcomb(1:2,1:94);
val = (1:2*94)';
A(combs(:,1), combs(:, 2), 1) = [val, val];
祝你好运!
答案 1 :(得分:0)
您可以尝试这样的事情:
A = zeros(2, 94, 10);
B = A;
combs = allcomb(1:2, 1:94);
vals = 1:(2*94);
for k=1:length(vals)
A(combs(k, 1), combs(k, 2), 1) = vals(k);
end
% here it starts
val = repmat(1:94, 94, 2);
B(combs(:, 1), combs(:, 2), 1) = [val; val + 94];
isequal(A, B) % returns 1
这应该会给你想要的结果。
答案 2 :(得分:0)
我使用稀疏()初始化找到了我正在寻找的简短而优雅的实现:
A = zeros(2, 94, 10);
combs = allcomb(1:2,1:94);
vals = 1:(2*94);
%% Here it is:
A(:,:,1) = sparse(combs(:,1), combs(:,2), vals);