-1

是否有任何现成的命令可以从输入中获取预期的输出?

输入

>>> 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?
4

2 回答 2

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)。

于 2013-11-02T16:25:14.343 回答
1

Luis 答案的一个变体是使用内置nnz函数:

idx = find(a);
rand_idx = idx(randi(nnz(a)));

如果您安装了统计工具箱,则可以使用以下方法将其简化为单行randsample

rand_idx = randsample(find(a), 1);

注意:如果您想选择一个随机值(而不是它的索引),请替换find(a)nonzeros(a)(这是生成随机索引然后执行的更短的替代方法a(rand_idx))。

于 2013-11-03T10:57:58.950 回答