掩盖字符串上的双倍
masking a double over a string
这是 MatLab 中的一道题...
我有两个矩阵,一个是 (5 x 1 double) :
1
2
3
1
3
第二个矩阵是一个(5 x 3 字符串),其中没有字符出现的空格:
a
bc
def
g
hij
我正在尝试获得一个输出,以便创建一个 (5 x 1 string) 并从矩阵二的每一行输出第 n 个值,其中 n 是矩阵一中的值。我不确定如何使用能够处理更大矩阵的掩码来执行此操作。我的目标矩阵将具有以下内容:
a
c
f
g
j
非常感谢您的帮助!!!
您可以通过多种方式完成此任务。我给你两个。
方法 #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 相同的顺序。
这是 MatLab 中的一道题... 我有两个矩阵,一个是 (5 x 1 double) :
1
2
3
1
3
第二个矩阵是一个(5 x 3 字符串),其中没有字符出现的空格:
a
bc
def
g
hij
我正在尝试获得一个输出,以便创建一个 (5 x 1 string) 并从矩阵二的每一行输出第 n 个值,其中 n 是矩阵一中的值。我不确定如何使用能够处理更大矩阵的掩码来执行此操作。我的目标矩阵将具有以下内容:
a
c
f
g
j
非常感谢您的帮助!!!
您可以通过多种方式完成此任务。我给你两个。
方法 #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 相同的顺序。