仍然试图掌握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]']
答案 0 :(得分:1)
你想要的是loop statement,for 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);