是否有任何就绪命令从输入中获取预期输出?
输入
>>> a=[1 0 3 0 5 6 7 8 0 10 0 0]; selectNonZero(a)
预期输出
1 or 3 or 5 or 6 or 7 or 8 or 10
试验
>> b=a(a~=0); pi=randi([1, length(b)]); b(pi) % The original index of b(pi)?
>> fix=[0 1 2 2 2 2 2]; pi+fix(pi) % Fix changed index, cum command?
答案 0 :(得分:3)
你可以这样做。它与您的方法类似,但使用find
来了解非零值的索引。
jj = find(a~=0); % indices of nonzero values of a
ind = jj(randi(length(jj))); % randomly pick one of those indices
val = a(ind); % corresponding value of a
您想要的结果是sel
(选定值)和ind
(其索引在a
内)。
答案 1 :(得分:1)
Luis回答的一个变体是使用内置的nnz
函数:
idx = find(a);
rand_idx = idx(randi(nnz(a)));
如果您安装了统计工具箱,则可以使用randsample
将其缩减为一行:
rand_idx = randsample(find(a), 1);
注意:如果要选择随机值(而不是其索引),请将find(a)
替换为nonzeros(a)
(这是生成随机索引然后执行{{1}的更短替代方法})。