生成矩阵来描述二维特征

Generating a matrix to describe a two-dimensional feature

假设我有一个向量 A = [-1,2]; A 中的每个元素都由实际数字和符号描述。所以每个元素都有一个二维特征集。

我想生成一个矩阵,在本例中为 2x2,其中列对应于元素,行对应于特征的存在。特征的存在由 1 和 0 描述。所以,如果一个元素是正数,它就是1,如果元素是数字1,那么结果也是1。在上面的例子中,我会得到:

                                      Element 1      Element 2
Is this a 1?                             1              0

Is this a positive number?               0              1     

完成此任务最明智的方法是什么?显然 if 语句可以工作,但我觉得应该有一种更快、更聪明的方法来解决这个问题。顺便说一句,我正在用 matlab 编写代码,如果有任何帮助,我将不胜感激。

第一个条件使用ismember,第二个条件使用逻辑运算的简单方法。 ismember 输出一个逻辑数组,您可以将其插入所需的输出(此处称为 DescribeA;同样,当您使用 > 运算符检查大于 0 的值时。

%// Test array
A = [-1,2,1,-10,5,-3,1]

%// Initialize output
DescribeA = zeros(2,numel(A));

%// 1st condition. Check if values are 1 or -1
DescribeA(1,:) = ismember(A,1)|ismember(A,-1);

%// Check if they are > 0 
DescribeA(2,:) = A>0;

命令输出Window:

A =

    -1     2     1   -10     5    -3     1


DescribeA =

     1     0     1     0     0     0     1
     0     1     1     0     1     0     1

我觉得第一个条件有更聪明的方法,但我似乎找不到。

@Benoit_11的解决方案很好。这是一个类似但可能更简单的解决方案。如果您关心速度,则可以尝试两者,看看哪个更快。

features = [abs(A) == 1; A > 0];

这假设 A 是一个行向量,以便以您指定的格式获得输出。