每个单元格根据matlab中的条件进行操作

时间:2012-09-07 18:00:04

标签: matlab conditional element computation

我不知道在没有迭代矩阵的情况下这是否可行,但这里提出了问题。对于任何给定的方阵表示“M'”,并且特定值表示“'键”。

我想计算一个新的矩阵(比如说' NM'),这样就可以了,

if M(i,j) < key; compute NM(i,j) using formula 1,
if M(i,j) = key; compute NM(i,j) using formula 2, and
if M(i,j) > key; compute NM(i,j) using formula 3

操作的输出必须是与M相同维度的新方阵。希望问题清楚。

提前致谢

2 个答案:

答案 0 :(得分:2)

听起来你想要这个纯矩阵解决方案,所以我会这样回答。 (你在标题中使用了cell这个词,它在Matlab中具有特定含义)

首先,您需要将矩阵NM定义为与M相同的大小,只需使用一个来定义另一个就足够了。然后使用逻辑索引仅将值应用于所需的矩阵元素。

NM=M;
NM( M < key) = formula1( NM(M < key) );
NM( M == key) = formula2( NM(M == key) );
NM( M >= key) = formula3( NM(M > key) );

以下是将单个公式NM=M+1应用于小于0.5的矩阵元素的说明性示例。

>> M=rand(3)

M =

0.0623    0.7783    0.0097
0.7011    0.2843    0.7337
0.1984    0.2123    0.9778

>> NM=M;
>> NM(M<.5)=M(M<.5)+1

NM =

1.0623    0.7783    1.0097
0.7011    1.2843    0.7337
1.1984    1.2123    0.9778

答案 1 :(得分:1)

我认为你只想做像

这样的事情
NM(M < key) = formula1;
NM(M == key) = formula2;
NM(M > key) = formula3;

根据您的公式,您可能需要将M的值传递给函数,即

NM(M < key) = formula1(M(M < key));