我有一个问题: 假设我有一个矩阵
A =
-1 2 -3
-4 5 -6
-7 8 -9
我将其转换为列矩阵
B = A(:)
B =
-1
-4
-7
2
5
8
-3
-6
-9
假设我想强制第一列元素位于特定范围内(-range1:range1),第二列元素位于(-range2:range2)& (-range3:range3)中的第三列元素。我尝试通过实现此代码来实现这一点:
range1 = 0;
range2 = -5;
range3 = 0;
B(B(1:3,1)<range1)=10;
B(B(4:6,1)>range2)=0;
B(B(7:9,1)<range3)=20;
我得到的答案是:
B =
20
20
20
2
5
8
-3
-6
-9
我得到的正确答案是:
B =
10
10
10
0
0
0
20
20
20
我做错了什么?请帮忙。
答案 0 :(得分:1)
仔细查看你的命令:
>> B( B(7:9, 1) < range3 ) = 20;
现在让我们一步一步来做吧
您要调整B( 7:9, 1 )
和-3, -6
的最后三个要素-9
。
因此你最终得到了
>> B(7:9, 1) < range3
ans =
true
true
true
您有三个元素的逻辑索引。使用这些逻辑索引来访问具有 9 元素的B
,可以访问九个中的前三个元素。
因此,您的所有命令仅修改B
的前三个元素,而不会影响B
的其余部分。
您可以主动定义您正在处理的范围,例如,第二列:
>> aRange = 4:6;
>> B( aRange( B(aRange, 1) > range2 ) ) = 0
直接查看三向量逻辑索引B(aRange, 1) > range2 )
如何索引aRange
(有3个元素)而不是B
(有9个元素)。
答案 1 :(得分:1)
你可以这样做:
A=[-1,2,-3;-4,5,-6;-7,8,-9];
range1 = 0;range2 = -5;range3 = 0;
B=A;
B((B(:,1)<range1),1)=10;
B((B(:,2)>range2),2)=0;
B((B(:,3)<range3),3)=20;
输出B的维度为mxn维度。
如果你想将它作为列向量。
B=B(:);