matlab索引程序,Matlab索引到逻辑索引

我知道我在游戏中已经很晚了,但我真的很想找到一个更快的解决方案,就像会员一样优雅.确实有一个采用无证件的

ismembc功能:

ismembc(v, i)

基准

N = 7;

i = [3 5];

%// slayton's solution

tic

for ii = 1:1e5

clear idx;

idx(N) = false;

idx(i) = true;

end

toc

%// H.Muster's solution

tic

for ii = 1:1e5

v = 1:N;

idx = ismember(v, i);

end

toc

%// Jonas' solution

tic

for ii = 1:1e5

idx = sparse(i, 1, true, N, 1);

end

toc

%// ismembc solution

tic

for ii = 1:1e5

v = 1:N;

idx = ismembc(v, i);

end

toc

这是我得到的:

Elapsed time is 1.482971 seconds.

Elapsed time is 6.369626 seconds.

Elapsed time is 2.039481 seconds.

Elapsed time is 0.776234 seconds.

令人惊讶的是,ismembc确实是最快的!

编辑:

对于非常大的N值(即,当v是大数组时),更快的解决方案实际上是slayton(和HebeleHododo,就此而言).您有多种策略可供选择,请仔细挑选:)

由H.Muster编辑:

以下是基准测试结果,包括_ismemberoneoutput:

Slayton's solution:

Elapsed time is 1.075650 seconds.

ismember:

Elapsed time is 3.163412 seconds.

ismembc:

Elapsed time is 0.390953 seconds.

_ismemberoneoutput:

Elapsed time is 0.477098 seconds.

有趣的是,Jonas的解决方案不适用于我,因为我得到一个指数超过矩阵维度.错误…

由hoogamaphone编辑:

值得注意的是,ismembc要求两个输入都是数字,排序,非稀疏,非NaN值,这是一个可以在source documentation中轻易错过的细节.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值