【问题标题】:Indexing Between two Matrices两个矩阵之间的索引
【发布时间】:2017-07-07 07:56:21
【问题描述】:

我有两个矩阵(V;顶点节点坐标 x、y、z 和 T;显示构成三角形的节点(1、2、3)的三角形列表)

我想将T中的值替换为对应顶点节点的坐标即:

V
    1 --- 1.35234 1.2542445 1.32234324
    2 --- 3.42354 1.2521345 1.34325524
    3 --- 2.26434 1.2323345 1.33225324
T
1 2 3 

should go to 

T_V

1.35234 1.2542445 1.32234324 3.42354 1.2521345 1.34325524 2.26434 1.2323345 1.33225324

【问题讨论】:

  • 你能澄清你的问题吗?你是说你有一个矩阵 V 并想把它变成一个单线向量 T 吗?
  • 不,我想做的是连接我拥有的两个矩阵(V 和 T),以澄清我希望 T 中的顶点连接到 V 并从 V 中提取坐标
  • 连接是否意味着 T 指定了将三角形节点从 V 中拉出的顺序?
  • 不,不是,T 有一个三角形的所有参与节点,它是我网格中所有三角形的列表。例如三角形 1 -- 1,2,3 ;三角形 2 -- 2,3,4 ;三角形 3 -- 3,4,5 ,这些是顶点点,顶点矩阵包含这些点的坐标,对于 T 中的每个参与节点,我希望拥有该特定节点的相应坐标
  • @AlanDeMoin 考虑阅读How to Ask,以及minimal reproducible example 是什么,以改进未来的问题;)

标签: matlab indexing point


【解决方案1】:

T 始终是 (1x3) 数组,您可以尝试:

T_V=reshape(V(T(:),:)',1,numel(T)*size(V,2))

对于更一般的情况,如果T 是一个矩阵,例如:

T=[1 2 3;4 5 6]

对于V 矩阵,例如

V=[
1.35234 1.2542445 1.32234324
3.42354 1.2521345 1.34325524
2.26434 1.2323345 1.33225324
10 20 30
40 50 60
70 80 90]

你可以试试:

T1=T'
V_T=reshape(V(T1(:),:)',1,numel(T1)*size(V,2))

编辑

如果T_V 矩阵的预期形状是(n_row of T x 9),您可以尝试(我在VT 上都添加了一些行用于测试目的):

V=[
1.35234 1.2542445 1.32234324
3.42354 1.2521345 1.34325524
2.26434 1.2323345 1.33225324
10 20 30
40 50 60
70 80 90]

T=[1 2 3
5 4 6]

T1=T'

T_V=reshape(reshape(V(T1(:),:)',1,numel(T1)*3),size(T,2)*size(V,2),size(T))'

生成的T_V 矩阵:

T_V =

    1.3523    1.2542    1.3223    3.4235    1.2521    1.3433    2.2643    1.2323    1.3323
   40.0000   50.0000   60.0000   10.0000   20.0000   30.0000   70.0000   80.0000   90.0000

注意:使用 Octave 测试

【讨论】:

  • 好吧,我的 T 矩阵是 x x 3,V 也是 x x x 3(分别为 2000 和 1300),有没有办法保持矩阵的形状而不是形成 1x3?跨度>
  • 如果执行您的编辑会弹跳并出错:大小参数必须是整数标量。
  • 正如答案中所写,我已经用Octave 测试了代码并且它有效,我无法判断您遇到的错误是否取决于MatLab 和@987654338 之间的差异@。我通过发布整个代码和结果更新了答案中的代码。
【解决方案2】:

我不知道你的意思是不是这种基本的东西,但是

V = [1.35234 1.2542445 1.32234324;
      3.42354 1.2521345 1.34325524;
      2.26434 1.2323345 1.33225324];
T = [1 2 3]
Tv = [V(T(1),:),V(T(1),:),V(T(3),:)];

【讨论】:

  • Tv = [V(T(1),:),V(T(1),:),V(T(3),:)];这有效,但它只适用于一个三角形,并且我喜欢将它作为 T 的长度
  • 现在知道了!非常感谢您必须添加 Tv= [V(T(:,1),:),T(F(:,2),:),V(T(:,3),:)];
  • @AlanDeMoin 考虑更新并接受有效的答案
猜你喜欢
  • 1970-01-01
  • 2018-08-31
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 2012-03-08
  • 1970-01-01
  • 2019-10-09
相关资源
最近更新 更多