【问题标题】:Matlab matrix indexing from 2 Arrays (X,Y) [duplicate]来自2个数组(X,Y)的Matlab矩阵索引[重复]
【发布时间】:2018-02-14 11:34:21
【问题描述】:

我有一个大数组的 X 和 Y 位置,我想用它们来定义那个位置的内容。我可以运行一个 for 循环来定义位置,但我认为会有更快的方法。我尝试使用数组位置定义函数。

x = [6,2,3]
y = [1,2,3]

c = [1,1,1,2,2,3;...
     1,1,1,2,2,5;...
     2,2,1,4,2,3;...
     1,1,4,3,2,3;...
     1,2,3,4,5,3;...
     1,2,3,5,4,2];

当我输入上面的等式时,它会得到下面的答案

c(y,x)
ans =
 1     2     3
 1     1     1
 2     2     1

我正在寻找的是数组中的 1:1 位置。

c(y(1),x(1))
c(y(2),x(2))
c(y(3),x(3))

有没有办法将数组限制为线性序列?我现在唯一的猜测是将数组重塑为包含单个 a 和 b 的单元矩阵,然后执行 cellfun。但我想我让它变得复杂了。

【问题讨论】:

  • 使用x和y作为线性索引,按列的长度-c(size(c,1)*(x-1)+y)

标签: arrays matlab indexing


【解决方案1】:

您必须先将位置转换为线性索引,然后才能在所需的线性序列中抓取正确的元素。您可以使用sub2ind 来帮助您做到这一点:

ind = sub2ind(size(c), y, x); % Get linear indices
v = c(ind); % Get the elements

这样做会得到:

>> v = c(ind)

v =

     3     1     1

您可以自己验证每一对 (y,x) 是否为您提供了您正在寻找的正确元素。比如y = 1和x = 6时,检索到的元素是3等等。

【讨论】:

  • @Hojo.Timberwolf 作为进一步阅读,这就是您的结果是矩阵而不是线性序列的原因:stackoverflow.com/a/19731104/3250829。当您为矩阵的行和列指定数组时,它会查找相交的行和列并返回该矩阵的子集。查看帖子了解更多详情。这就是为什么您需要将每对行和列坐标转换为单个线性索引的原因。这样,您将能够提取单个元素而不是矩阵的子集。
猜你喜欢
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
  • 2016-10-02
相关资源
最近更新 更多