Warm tip: This article is reproduced from serverfault.com, please click

matrix-Matlab矩阵地址

(matrix - Matlab Matrixaddress)

发布于 2020-12-14 14:50:52

在我的课程中,我遇到了这种表达:

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矩阵。

我应该如何阅读结构?

  1. Graphem::..给我看看行,
  2. Graphem:end:-1.. ??
  3. Graphem ::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进行了某种优化”。期待在每个步骤中提供有用的答案。:)

提前致谢!

Questioner
Vi Et
Viewed
0
saastn 2020-12-15 04:17:20

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:3rangeStrart:increment:rangeEnd现在,3:13: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