Add operation is too slow

1 ビュー (過去 30 日間)
Igor Arkhandeev
Igor Arkhandeev 2021 年 5 月 27 日
編集済み: Jan 2021 年 5 月 27 日
Hi! I have some operation of summing two arrays (vd, bd) of different lengths ((vl + 1)^2 and ((bd + 1)^2). I can't do summing as d = vd + bd (error: different lengths). How can I do this operations faster? I compile MEX, but this did not give the required increase in speed. I need speed up adding because it using around 20 million
function [l, d] = add(vl, vd, bl, bd, lmax)
l = max([vl, bl, lmax]);
d = zeros((l + 1)^2, 1);
i = 1:(vl + 1)^2;
j = 1:(bl + 1)^2;
d(i) = d(i) + vd(i);
d(j) = d(j) + bd(j);
end
  2 件のコメント
Igor Arkhandeev
Igor Arkhandeev 2021 年 5 月 27 日
Of course!
d = [5 7 9 7]; % 1 + 4, 2 + 5, 3 + 6, 7

サインインしてコメントする。

採用された回答

Jan
Jan 2021 年 5 月 27 日
編集済み: Jan 2021 年 5 月 27 日
It would save time to work with the real sizes instead of providing vl, if you actually need (vl+1)^2. This would save 60 mllion squaring operations.
function [l, d] = add(vl, vd, bl, bd, lmax)
l = max(max(vl, bl), lmax);
d = zeros((l + 1)^2, 1);
iv = (vl + 1)^2;
id = (bl + 1)^2;
d(1:iv) = d(1:iv) + vd(1:iv); % Or: d(1:iv) + vd; ?
d(1:id) = d(1:id) + bd(1:id); % Or: d(1:id) + bd; ?
end
The JIT acceleration profits from using x(a:b) instead of creating the index vector v=a:b; x(v).
If the inputs are uniquely explained, it would be possible to modify the function without too much guessing. Maybe this would be better already, maybe not:
function [len, d] = add(a, b, len)
na = numel(a);
nb = numel(b);
len = max(max(na, nb), len);
d = zeros(len, 1);
if na == nb
d = a + b;
elseif na > nb
d(nb+1:na) = a(nb+1:na);
d(1:nb) = a(1:nb) + b;
else
d(na+1:nb) = b(na+1:nb);
d(1:na) = a + b(1:na);
end
end

その他の回答 (1 件)

Matt J
Matt J 2021 年 5 月 27 日
編集済み: Matt J 2021 年 5 月 27 日
vd=[1 2 3];
bd=[4 5 6 7];
N=max(numel(vd), numel(bd));
vd(end+1:N)=0;
bd(end+1:N)=0;
d=vd+bd
d = 1×4
5 7 9 7

カテゴリ

Find more on Variables in Help Center and File Exchange

タグ

製品


リリース

R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by