在 matlab 中对 3D 数组进行切片和赋值
Slicing and assigning values to a 3D array in matlab
我尝试为二维数组的前两个维度赋值,同时保持第三个维度不变。但是我收到一个错误。
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
等式右侧的 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];
祝你好运!
您可以尝试这样的操作:
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
这应该会给你想要的结果。
我找到了我正在寻找的简短而优雅的实现,使用 sparse() 初始化:
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);
我尝试为二维数组的前两个维度赋值,同时保持第三个维度不变。但是我收到一个错误。
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
等式右侧的 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];
祝你好运!
您可以尝试这样的操作:
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
这应该会给你想要的结果。
我找到了我正在寻找的简短而优雅的实现,使用 sparse() 初始化:
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);