这是MatLab中的一个问题...... 我有两个矩阵,一个是(5 x 1双):
1
2
3
1
3
第二个矩阵是(5 x 3字符串),空格中没有字符出现:
a
bc
def
g
hij
我试图获得一个输出,使得(5 x 1字符串)被创建并从矩阵2的每一行输出第n个值,其中n是矩阵1中的值。我不确定如何使用能够处理更大的石头的面具来做到这一点。我的目标矩阵将具有以下内容:
a
c
f
g
j
非常感谢您的帮助!
答案 0 :(得分:0)
有很多方法可以完成这项任务。我会给你两个。
使用sub2ind
生成一组线性索引,这些索引对应于要在矩阵中访问的行和列位置。您会注意到列位置是更改的位置,但是当您想要访问每一行时,行位置总是增加1。因此,根据您的字符串矩阵A
以及您要访问的ind
存储列,只需执行以下操作:
A = ['a '; 'bc '; 'def'; 'g ';'hij'];
ind = [1 2 3 1 3];
out = A(sub2ind(size(A), (1:numel(ind)).', ind(:)))
out =
a
c
f
g
j
logical
并访问或者,您可以通过sparse
创建一个稀疏矩阵,其中非零条目的行数从1到ind
中的元素数不等,并且列的变化与您所拥有的不同给了我们。
S = sparse((1:numel(ind)).',ind(:),true,size(A,1),size(A,2));
A = A.'; out = A(S.');
请注意,您尝试以行为主要方式访问每个元素,但MATLAB将以列主格式执行此操作。因此,我们需要转置我们的数据矩阵,并采用我们的稀疏矩阵并进行转置。最终结果应该为您提供与方法#1相同的顺序。