Call on function that takes in 2 variables multiple times

6 ビュー (過去 30 日間)
Spacestudent112233
Spacestudent112233 2022 年 11 月 10 日
回答済み: William Rose 2022 年 11 月 10 日
so my function takes in one double variable and one 1by3 array
it outputs a 1by3 array
I was wondering if theres a way to pass in a N by 1 double, with a N by 3 array, and have it output a N by 3 array without using a loop, my code currently looks like this:
N=100
input_doubles = rand(N,1)
input_vectors = rand(N,3)
output_vectors = zeros(length(input_doubles),3);
for i = 1:1:length(input_doubles)
output_vectors = example_func(input_doubles(i), input_vectors(i, :))
end
is there a way to not use a for loop? but still call the function individually and collect it's output into rows?

採用された回答

Matt J
Matt J 2022 年 11 月 10 日
編集済み: Matt J 2022 年 11 月 10 日
You can hide the loop with arrayfun, but it won't speed things up.
output_vectors = cell2mat(arrayfun(@(i) {example_func(input_doubles(i), input_vectors(i, :)},...
(1:length(input_doubles))' );

その他の回答 (1 件)

William Rose
William Rose 2022 年 11 月 10 日
You can write a funciton that returns values whose size varies as the size of the inputs vary. I am not sure if that is acceptable to you. Here is an example.
function z = example_func(x,v)
%EXAMPLE_FUNC Returns vector or array.
% If size(x)=1x1 and size(v)=1x3, then size(z)=1x3.
% If size(x)=Nx1 and size(v)=Nx3, then size(z)=Nx3.
% See Matlab Answers post by Spacestudent112233, 2022-11-10.
z=x.*v;
end
>> disp(example_func(2,[4,5,6]))
8 10 12
>> disp(example_func([2;4;6;8],[1,2,3;10,20,30;100,200,300;1000,2000,3000]))
2 4 6
40 80 120
600 1200 1800
8000 16000 24000
If you pass it a double and a vector, it retruns a vector.
Example 1 above: It returns 1x3 when it recieves 1x1 and 1x3.
Example 2, above: N=4. It returns Nx3 when it receives Nx1 and Nx3.
This is what you requested. Good luck.

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

製品


リリース

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by