多次调用数组上的函数

时间:2013-09-28 17:42:54

标签: arrays matlab matrix

仍然试图掌握Matlab的基础知识。

我有一个函数f,它将矩阵A和两个数字(max和delta)作为参数。

我还有一个函数g,它取一个矩阵A和一个数字阈值并返回一个矩阵B,如果A中一个元素的值大于或等于阈值,B中的相应值应为1,如果它小于或等于-threshold,它应该是-1,否则为0.原始矩阵不应该在函数f和g中都没有改变。

我希望函数f在g的调用中为阈值尝试不同的值,并且我希望每次调用的结果在新矩阵中水平排列。

我不知道如何做这个函数f,我猜最简单的方法就是创建一个数组:

 t1= [-threshold:delta:threshold]; 

但是如何为数组中元素的每个值调用g并将它们排成一个新数组呢?

function B = f(A, threshold, delta)
    t1= [-threshold:delta:threshold];
    %What to write here?
end

function B = g(A, threshold)
    B=(A>=threshold)-(A<=-threshold);
end

如果

A=[[-3:-1]' [1:3]']

然后

f(A, 2, 1)

应该返回与命令相同的矩阵[[-1 -1 0]'[0 1 1]'[ - -1 0]'[0 1 1]']

1 个答案:

答案 0 :(得分:1)

你想要的是loop statementfor loop会在这里做得很好。

至于并排排列数组,只需创建一个正确大小的数组:

h = size(A,1);
w = size(A,2);
result = zeros( h , w*floor(2*threshold/delta) );

然后在每个迭代索引中正确的部分:

result(:,((i*w):((i+1)*w)+1) = g(A, -threshold+delta*i);

虽然,我必须说,存储数据有点奇怪,最好使用单元格数组或3D矩阵,如下所示:

result = zeros( h , w , floor(2*threshold/delta) );

result(:,:,i+1) = g(A, -threshold+delta*i);