在我的课程中,我遇到了这种表达:
A(:,end:-1:1)
我很难理解和阅读第二个操作数“ end; -1; 1”的词素结构
让我们举个例子:
A=[1 2 3; 4 5 6; 7 8 9]
我知道:
A(:)
..输出[1 2 3; 4 5 6; 7 8 9]
为行。运算子为:
。
A(1,:)
..输出[1 2 3; 4 5 6; 7 8 9]
为列的操作是,
那么,
。
A(:,1)
..输出[1 2 3; 4 5 6; 7 8 9]
为行。操作员是,
事先:
。
A(:,end:-1:1)
Matlab中的输出向我展示:3x3
矩阵。
我应该如何阅读结构?
end:-1
.. ??1
..:
对我来说,“ ”是某种方式来显示所有元素。
对我来说,“ Operand1 , Operand2
”向我显示了2
尺寸矩阵。
第一个想法:
在end:-1:1
我看来,这种表达就像一个循环。那-1, 0, 1 => **3x Elements**
呢
但是当我打字
A(1,end:3)
它只显示第三行。
第二个想法:
A(end:-1:1,1)
它向我展示了倒置矩阵。
我的背景:
我是语言领域的一名本科生。
根据Ben Eater的说法,我在业余时间构建了8位Sap1。
所以我熟悉程序存储器或指令存储器。
我仅了解结果,而不了解MATLAB编译器如何实现该结果。
有人对我说,“ Matrixaddressing进行了某种优化”。期待在每个步骤中提供有用的答案。:)
提前致谢!
end
矩阵索引中的关键字指示相应维度中最后一个元素的索引。因此,A(:,end:-1:1)
简单地意味着A(:, size(A, 2):-1:1)
,在你的示例(A=[1 2 3; 4 5 6; 7 8 9]
)中,它等效于A(:, 3:-1:1)
。
但是要了解它的作用,你需要知道3:-1:1
它的作用。它创建一个子范围。你已经知道1:3
创建了[1, 2, 3]
。1:3
是的简化形式1:1:3
:rangeStrart:increment:rangeEnd
。现在,3:1
或3:1:1
创建一个空向量,因为rangeStart
大于rangeEnd
。要进行创建,[3, 2, 1]
你需要使用否定步骤:3:-1:1
。
因此,A(:,end:-1:1)
意味着A(:, [3, 2, 1])
,它会反转的行顺序A
。此外,A(:,end:3)
意味着A(:, 3:3)
和最终A(:, 3)
将返回的第3行A
。
编辑:关于你的误解,由@CrisLuengo解决
我知道:
A(:) ..输出[1 2 3; 4 5 6; 7 8 9]作为行。运算符是:。
A(1,:) ..输出[1 2 3; 4 5 6; [7 8 9]作为列运算符,则,。
A(:,1)..输出[1 2 3; 4 5 6; 7 8 9]作为行。运算符事先为:。
A(3, 2)
是位于A的3,2位置(第三行,第二列)的元素A(1, :)
等于A(1, 1:size(A, 2))
和A(1, 1:end)
,是的第一行A
A(:, 1)
等于A(1:size(A, 1), 1)
和A(1:end, 1)
,是的第一列A
A(:)
等同于A(1:numel(A))
并且是包含以下所有元素的单列A