我一直用CT图像的分割和地方走了过来这个公式:A = A〜= 0是做什么的,我该如何指定它?
A = A〜= 0
在我的情况是从0到255数值的一个巨大的矩阵。如果我使用A = A〜= 0,其中A是我的矩阵,我是否得到所有0到0(假)的值,其余的是1(真)。那么这个公式如何表达:“值不等于0?”。还有另外一个问题,如果我之前写的是真的,可以将公式转换成几个数字,例如“值是否等于0,1,2,3,4,5,”。 ..,50?”
希望我的问题是可以理解的,有人可以帮助我。
谢谢!
我一直用CT图像的分割和地方走了过来这个公式:A = A〜= 0是做什么的,我该如何指定它?
A = A〜= 0
在我的情况是从0到255数值的一个巨大的矩阵。如果我使用A = A〜= 0,其中A是我的矩阵,我是否得到所有0到0(假)的值,其余的是1(真)。那么这个公式如何表达:“值不等于0?”。还有另外一个问题,如果我之前写的是真的,可以将公式转换成几个数字,例如“值是否等于0,1,2,3,4,5,”。 ..,50?”
希望我的问题是可以理解的,有人可以帮助我。
谢谢!
~=
是“不等于”运算符。
因此,表达式A ~= 0
返回一个逻辑矩阵,其中A(i,j)为非零(且在所有其他条目中为零)的条目“1”。
结果被分配回A,所以你得到一种掩码:A(i,j)== 1如果A在此时具有非零值。
对于~=
你的理解是正确的,你会为0和1的所有不等于0
关于你提到的第二个问题得到0,有一个矩阵
B = [0:50]; % or whatever elements in it;
然后使用arrayfun
命令
A=arrayfun(@(x)(ismember(x,B)),A);
请在命令窗口输入:help arrayfun
和help ismember
以获取详细信息。
基本上它使用匿名函数搜索B
中A
中每个元素的存在。
你的第一个问题是answered by @nimrodm,但是对于第二部分你有两种不同的方法。如果要排除像[0, 50]
指定的时间间隔的所有号码,你可以使用
A = (A<0) | (A>50);
如果要检查一些特定的值,也就是说,{0, 5, 11, 50}
可以使用ismember
A = ~ismember(A, [0, 5, 11, 50]);
有问题的操作通过线性索引来执行,所以'A'不需要像你的例子那样是一个2-D矩阵。 'A'可能是一个矢量(在Matlab中也被认为是一个矩阵),一个N-D数组或一个空数组。另外,如果'A'是某种形式的空数组,例如'[]',则'A'本身被返回 - 而不是'0'('false')或'1'('true') - 某事时刻注意。 – horchler
@horchler:+1。感谢您的详细信息。我不想打扰N-D阵列的新手,但当然你是对的。随意编辑答案。 – nimrodm