matlab - 为什么列向量在用于索引矩阵时返回行向量?

标签 matlab matrix vector

假设在 MATLAB 中定义了以下矩阵:

>> matrix=10:18

matrix =

     10    11    12    13    14    15    16    17    18

现在我想用另一个矩阵来索引第一个

>> index=[1,2;3,4]

index =

     1     2
     3     4

>> matrix(index)

ans =

     10     11
     12     13

到目前为止一切顺利,答案的大小与矩阵“索引”的大小相匹配。如果我使用一个行向量作为索引矩阵,输出也是一个行向量。但是当我使用列向量作为索引矩阵时出现问题:

>> index=(1:3)'

index =

     1
     2
     3

>> matrix(index)

ans =

    10    11    12

如您所见,此处答案的大小与矩阵“索引”的大小不一致。索引矩阵和 ans 矩阵大小的这种不一致使我无法编写一段代码来接受任意大小的索引矩阵。

我想知道以前是否有人遇到过这个问题并找到了某种解决方案;换句话说,我如何强制 MATLAB 给我一个与任意大小的索引矩阵大小相同的 ans 矩阵?

干杯


解决方案

@Dev-iL 很好地解释了 here为什么这是 Matlab 的行为方式,@Dan 提出了一个通用的解决方案 here .但是,我的代码有一个更简单的临时解决方法,我已经解释过了 here .

最佳答案

原因来自函数subsref.m,使用括号时调用:

%SUBSREF Subscripted reference.
%   A(I) is an array formed from the elements of A specified by the
%   subscript vector I.  The resulting array is the same size as I except
%   for the special case where A and I are both vectors.  In this case,
%   A(I) has the same number of elements as I but has the orientation of A.

如您所见,在向量的特殊情况下,结果的形状将与示例中的矩阵的形状相同。

至于解决方法,恕我直言 Dan has the cleanest solution .

关于matlab - 为什么列向量在用于索引矩阵时返回行向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25061605/

相关文章:

c++ - vector vector 的初始化?

c++ - 为什么我的 vector 不能识别我的派生类?

R如何在运行长度中保存唯一值的同时删除重复值

python - 打印频域图的最高峰值

python - numpy 不能将行向量转置为列?

arrays - 如何在 MATLAB 中合并结构体/结构体数组?

java - 为什么我的旋转矩阵会产生额外的平移?

c++ vector operator[] 引用

matlab - 如何在 MATLAB 中计算交换矩阵

matlab - 如何在 MATLAB 中使用分组和堆叠样式创建条形图?