我想尝试在没有循环的情况下实现它......
我有 A,作为 A[3x3xN] 或 [3,3,N],对于每个 N,它都是一个不同的矩阵。
和 B 作为 [3x1xN] 当然......
如何在不进行循环的情况下解决它并且每次都使 A^-1 * B ?
我想尝试在没有循环的情况下实现它......
我有 A,作为 A[3x3xN] 或 [3,3,N],对于每个 N,它都是一个不同的矩阵。
和 B 作为 [3x1xN] 当然......
如何在不进行循环的情况下解决它并且每次都使 A^-1 * B ?
Z = cellfun(@(a,b) a\b, ... %# Solve for each pair
num2cell(A,[1 2]), ... %# Make a cell array containing each slice
num2cell(B,[1 2]), ... %# Make a cell array containing each slice
'UniformOutput',false);
Z = cat(3,Z{:}); %# Merge the results to a 3x1xN array
num2cell
有关使用的功能的更多详细信息,请参阅cellfun
文档。
让我们将其速度与 for 循环进行比较:
clc, clear
N = 100000;
D = 10;
A = rand(D,D,N);
B = rand(D,1,N);
tic
Z = cellfun(@(a,b) a\b, ...
num2cell(A,[1 2]),num2cell(B,[1 2]),'UniformOutput',false);
Z = cat(3,Z{:});
toc
tic
Z2 = zeros(D,1,N);
for i = 1:N
Z2(:,:,i) = A(:,:,i) \ B(:,:,i);
end
toc
all(isequal(Z,Z2))
我的结果如下:
Elapsed time is 2.130507 seconds.
Elapsed time is 1.306873 seconds.
我尝试了不同的D
值并得到了相似的比率。乔纳斯的赌注是正确的!