【问题标题】:MATLAB: Matrix containing values of another matrix at specific indicesMATLAB:包含特定索引处另一个矩阵值的矩阵
【发布时间】:2013-07-05 03:49:26
【问题描述】:

我需要帮助解决索引问题。分配的问题说明: 两个矩阵(x 和 y)给出从矩阵 A 形成矩阵 B 的坐标。生成矩阵 B,其中包含在 x 和 y 中给定坐标处的 A 的值。 例如:

x = [1 1 1; 2 2 1]
y = [1 2 1; 3 2 4]
%This would read as (1,1),(1,2),(1,1),(2,3),(2,2),(1,4)
% Given matrix: 
A = [6 7 8 9; 10 11 12 13];
%This would give us this answer for B (using the coordinate scheme above): 
B=[6 7 6; 12 11 9];

我猜我需要将 find 函数与 sub2ind 函数结合使用,但我不能 100% 确定如何将其转换为工作代码。我唯一能想到的就是做这样的事情:

B=((x(1),(y(1)), (x(2),y(2)).......

但这仅适用于上面定义的矩阵,而不是随机生成的矩阵。我试图在网站上寻找类似的问题,但我找不到。您的帮助将不胜感激!

【问题讨论】:

标签: matlab matrix matlab-guide indices


【解决方案1】:

您不能对随机生成的矩阵执行此操作,因为您必须确保矩阵 A 具有 xy 的值所需的行和列。

在这种情况下,你可以这样写:

for i=1:length(x(:))
   B(i)=A(x(i),y(i));
end
B=reshape(B,size(x));

【讨论】:

  • 我在实现您的代码时不断收到错误消息:“要重塑元素的数量不得更改。”和“B=reshape(B,size(x)) 中的错误”。这是我在脚本中输入的内容,它不起作用:x = [1 1 1; 2 2 1] y = [1 2 1; 3 2 4] A = [6 7 8 9; 10 11 12 13] 对于 i=1:length(x(:)) B(i)=A(x(i),y(i));结束 B=reshape(B,size(x))
  • 我复制了你的代码,得到 B=[6 7 6; 12 11 9]。我不知道是什么问题...size(B) 得到了什么?
  • 对不起,我刚刚在清除clear,clc命令窗口后重试,它成功了!我得到了正确的矩阵。谢谢您的帮助! :D
猜你喜欢
  • 1970-01-01
  • 2013-01-20
  • 2015-06-16
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
相关资源
最近更新 更多