我有两个巨大的数组,如下所示:
A = [11, 11, 12, 3, 3, 4, 4, 4 ];
B = [ 12, 4; 3, 11; 11, 1; 4, 13 ];
我想创建一个数组,它从 B 中获取值,从 A 中获取第 1 列,如下所示:
C = [ 11, 1; 11, 1; 12, 4; 3, 11; 3, 11; 4, 13; 4, 13; 4, 13 ];
我不想使用 for 或任何其他类型的循环来优化流程。
抱歉太简洁了。
我将在 B 的第 1 列中搜索 A 的第 1 列中的每个元素,并从 B 中选择相应的第 2 列元素,并创建一个包含 A 的第 1 列元素和从 B 中发现的第 2 列元素的新数组。
最佳答案
您在此问题中所做的是使用 A
并搜索 B
的第一列以查看是否存在匹配项。一旦匹配,提取出与 B
中匹配位置对应的行。对 A
中的其余值重复此操作。
假设 A
的所有值都可以在 B
中找到并且 B
的第一列是不同的 并且没有重复项,您可以调用 unique
和 sortrows
调用。 unique
调用是在 A
上进行的,因此您可以将 A
中的每个值分配为按排序顺序排列的唯一标签。然后,您将使用这些标签对 B
的排序版本进行索引,以获得您想要的结果:
[~,~,id] = unique(A);
Bs = sortrows(B);
C = Bs(id,:);
我们得到 C
:
C =
11 1
11 1
12 4
3 11
3 11
4 13
4 13
4 13
关于arrays - Matlab:使用较小的数组创建更大的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32100098/