我有一个矩阵,其初始化如下:

stateAndAction = zeros(11, 4);


随着时间的流逝,矩阵将被更新,以便在给定的索引处将有一个。因此,在任何给定时间,我们可能会遇到类似以下的内容

1 1 0 1
1 0 0 0
0 1 0 0
0 0 1 0
0 1 0 0
0 0 0 1
1 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0


如何找到其中有一个的随机行和列?

这是我想到的功能签名:

[random_row_index, random_column_index] = findRandom(stateAndAction)

最佳答案

您可以使用find查找非零元素的位置,选择一个随机元素,然后将索引转换为数组中行/列的位置:

function [random_row_index, random_column_index] = findRandom(stateAndAction)
    ids = find(stateAndAction==1);
    random = randi([1,numel(ids)],1);
    id=ids(random);
    [random_row_index, random_column_index] = ind2sub(size(stateAndAction),id);
end

10-06 10:38