Matlab矩阵地址

标签 matlab matrix syntax programming-languages matrix-indexing

<分区>

在我的类(class)中,我遇到了这个表达:

A(:,end:-1:1)

I have trouble to understand and read the morphemic structure of the 2nd Operand "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. 图形: :1 ..

不知何故,“:”对我来说是显示所有元素的运算符。

Operand1 , Operand2”向我展示了 2 维度矩阵,这对我来说很有意义。

  • 第一个想法:
    end:-1:1 表达式在我看来就像一个循环。所以 -1, 0, 1 => **3x 元素** ?
    但是当我输入

    A(1,end:3)
    它只显示第三行。

  • 第二个想法:

    A(end:-1:1,1)
    它向我展示了倒矩阵..

我的背景:
我是一名语言专业的本科生。
根据 Ben Eater 的说法,我在空闲时间构建了 8 位 Sap1。
所以我熟悉程序存储器或指令存储器。
understand只有结果,而不是 MATLAB 编译器如何实现的。
有人对我说“矩阵寻址以某种方式进行了优化”。 期待在每一步中得到有用的答案。 :)

提前致谢!

最佳答案

矩阵索引中的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:31:1:3 的简化形式:rangeStrart: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),这返回 A 的第 3 行。

编辑:关于您的误解,由@CrisLuengo 解决

I am aware of:
A(:).. Outputs [1 2 3; 4 5 6; 7 8 9] as rows. Operator is :.
A(1,:).. Outputs [1 2 3; 4 5 6; 7 8 9] as columns Operator is , then , .
A(:,1).. Outputs [1 2 3; 4 5 6; 7 8 9] as rows. Operator is ,beforehand : .

  • 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 所有元素的单个列

关于Matlab矩阵地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65291093/

相关文章:

matlab - Matlab如何标准化广义特征向量?

matlab - 计算图像中颜色的百分比

c - C 中的动态矩阵重新分配 - 在访问冲突读取位置 (msvcr120d.dll) 出现错误未处理的异常

matrix - 在 Golang 中乘以 2 个或更多数组

c++ - 在opencv中创建NDWI矩阵

python - Python 中的 _ 是做什么的?

php - 在 PHP 中用没有循环的值填充数组

c++ - OpenCV(C++) 和 Matlab 中的矩阵掩蔽操作

ios - "Oops: ; return error;"是 C 中的有效方法声明吗?

multithreading - 我可以在 parfor (MATLAB) 上在工作人员之间发送和接收数据吗?