生成矩阵来描述二维特征
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 是一个行向量,以便以您指定的格式获得输出。
假设我有一个向量 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 是一个行向量,以便以您指定的格式获得输出。