Matlab:将零一个索引向量更改为适当的索引向量
假设一个二进制索引向量,如下所示 输入Matlab:将零一个索引向量更改为适当的索引向量,matlab,indices,Matlab,Indices,假设一个二进制索引向量,如下所示 输入 1 1 0 0 1 0 1 1 2 3 4 5 6 7 1 2 5 7 预期输出 1 1 0 0 1 0 1 1 2 3 4 5 6 7 1 2 5 7 表示要选择的第个编号。因此,我想将1010101更改为1257,有什么简单的方法吗?解决方案是使用函数find(indicesBinary)如果您真的想使用输出对另一个向量进行索引,请直接执行 您只需将二进制向量转换为逻辑 A = [1 1 0 0 1 0 1]; %assuming i
1 1 0 0 1 0 1
1 2 3 4 5 6 7
1 2 5 7
预期输出
1 1 0 0 1 0 1
1 2 3 4 5 6 7
1 2 5 7
表示要选择的第个编号。因此,我想将
1010101
更改为1257
,有什么简单的方法吗?解决方案是使用函数find(indicesBinary)
如果您真的想使用输出对另一个向量进行索引,请直接执行
您只需将二进制向量转换为逻辑
A = [1 1 0 0 1 0 1]; %assuming its double
B = [1 2 3 4 5 6 7];
C = B( logical(A) )
C =
1 2 5 7
我之前做过
vals=1:length(数据结构);VAL(indicesBinary)
但正在寻找更优雅的解决方案。Ofc,为什么我总是忘记这个…+1.)。请记住,如果您想使用它为另一个向量编制索引,使用find作为中间步骤实际上比直接使用indicesBinary要慢。您的意思是最好使用vals=1:length(dataStructure);VAL(逻辑(指示二进制))
?一点也不。如果您想这样做,“查找”会更有效。但是如果您想使用VAL或IndicatiesBinary从不同的向量中选择值,直接使用IndicatiesBinary会更快你有一个二进制索引向量b_idx=[0,1,1,0]
如果你想用b_idx索引v,你可以选择v=v(b_idx)代码>。输出为sel_v=[63,34],且为fast+。如果您想知道b_idx对应的索引(如问题中所提出的),您需要idx=find(b_idx)代码>。输出为idx=[2,3]。然后,你也可以做sel_v=v(idx)代码>获取sel_v=[63,34]。执行find
,然后使用idx
索引以获取[63,34]也很快,但没有直接使用b_idx
那么快。希望能把事情弄清楚