【问题标题】:How to access a multidimensional array by indexes given in another vector, when the dimension of the array changes dynamically? [duplicate]当数组的维度动态变化时,如何通过另一个向量中给出的索引访问多维数组? [复制]
【发布时间】:2016-04-12 21:27:53
【问题描述】:

我有一个多维数组Data 和一个1xn 向量Location,其元素对应于我希望在数组Data 中访问的特定点的索引。 因此,向量Location 中的元素个数始终等于多维数组Data 的维数。 (If length(Location) = n, then dim(Data)=n)。

例如,如果Location = [4 0 9 3],那么我试图在Data 中访问的点将是:result = Data(4,0,9,3)

如果Data 的维度是固定的,我可以简单地做(如果说,n=4):

result = Data(Location(1,1), Location(1,2), Location(1,3), Location(1,4));

但是,在我的问题中,Data 的尺寸(因此Location 的长度)发生了变化。 这使得访问Data 变得更加复杂,我有点不知所措。

我如何确定Data 中我试图访问的点?

如果可能的话,我更喜欢不使用任何循环的解决方案,但这可能是不可能的,所以如果您有基于循环的解决方案,请无论如何提出!

【问题讨论】:

  • 为这种多维数组情况添加样本输入和预期输出?
  • Data(Location) 不工作吗?
  • @BillBokeey 它没有给我我想要的,因为它返回一个新向量,其元素对应于 Data 中的元素编号。例如:数据 [1 , 2 ; 3 , 4] 和 Location = [1 , 2] Data(Location) 返回: result = [1 , 3] 而我想要的是 Data(1,2)=2
  • 确实如此。你需要做:CellLoc=num2cell(Location); - out=Data(CellLoc{:});
  • CellLoc{:} 等价于输入CellLoc{1},CellLoc{2},... 正好是Location(1),Location(2),...

标签: arrays matlab multidimensional-array


【解决方案1】:

Location 设为一个元胞数组,例如在您的问题的评论中给出的示例:

Data = [1, 2; 3, 4];
Location = {1, 2};

Data(Location{:})

这给了

ans = 2

根据@BillBokeey 的评论进行编辑:

如上定义Location为元胞数组或使用num2cell将行向量Location转换为元胞数组,例如:

Data = [1, 2; 3, 4];
Location = [1, 2];
Location_cell = num2cell(Location);

Data(Location_cell{:})

【讨论】:

  • 这不是真正的动态.. 请在 OP 的 Location 向量上添加 num2cell 调用
  • @BillBokeey 抱歉,在回答之前我没有看到您的评论。同意,要将向量 Location 转换为元胞数组,请使用 num2cell
  • 没关系,只需通过num2cell 呼叫编辑您的答案
猜你喜欢
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 1970-01-01
  • 2012-12-24
  • 2020-02-04
  • 1970-01-01
相关资源
最近更新 更多