掩盖字符串上的双精度

时间:2015-02-11 19:45:23

标签: string matlab double mask

这是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

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

有很多方法可以完成这项任务。我会给你两个。

方法#1 - 生成线性索引和访问元素

使用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

方法#2 - 创建稀疏矩阵,转换为logical并访问

或者,您可以通过sparse创建一个稀疏矩阵,其中非零条目的行数从1到ind中的元素数不等,并且列的变化与您所拥有的不同给了我们。

S = sparse((1:numel(ind)).',ind(:),true,size(A,1),size(A,2));
A = A.'; out = A(S.');

请注意,您尝试以行为主要方式访问每个元素,但MATLAB将以列主格式执行此操作。因此,我们需要转置我们的数据矩阵,并采用我们的稀疏矩阵并进行转置。最终结果应该为您提供与方法#1相同的顺序。