0

仍在尝试掌握 Matlab 的基础知识。

我有一个函数 f,它以矩阵 A 和两个数字(最大值和增量)作为参数。

我还有一个函数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 -1 0]' [0 1 1]']

4

1 回答 1

1

你想要的是一个循环语句,一个for 循环在这里会做得很好。

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

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);
于 2013-09-28T18:19:19.980 回答