【问题标题】:How to increment some randomly chosen elements which are greater than zero?如何增加一些随机选择的大于零的元素?
【发布时间】:2017-03-17 20:37:57
【问题描述】:

我有以下矩阵:

M =[ 0  0  0  0  0  0  0  0 ;
     0  0  0  0  0  0  6  0 ;
     0  0  0  0  3  0  3  3 ;
     0  0  0  9  9  6  9  6 ;
     0  0  0  9  6  9  9  0 ;
     0  0  0  0  6  3  0  0 ;
     0  0  0  0  0  0  0  0 ;
     0  0  0  0  0  0  0  0 ];

我想在大于0M的十个随机选择的元素中添加1

如何做到这一点?

【问题讨论】:

  • 很不清楚你在问什么。请详细说明“随机”和“时间量”。
  • 我想添加一个带有 1 的随机元素。假设我有 10 个苹果,我想一次将 1 个苹果分配给一个随机的人。我怎么能在 Matlab 中做到这一点?我希望我的问题很清楚。
  • 你只能给每个人1个苹果?或者你可以给他们多个苹果,每次一个?
  • 每个人 1 个苹果。
  • 可以说,我做了一个循环执行 10 次,每一轮我给一个随机的人 1 个苹果。

标签: matlab matrix random


【解决方案1】:

查找大于零的元素的索引,并从这些索引中生成n 随机样本,这些样本将被递增。然后只需将1 添加到那些n 随机索引处的元素。

n=10;           %No. of elements of M greater than zero which will be incremented by 1
t1 = find(M>0); %Finding indices of elements of M which are greater than zero
t2 = randperm(length(t1)); %Generating random indices from which first n will be selected
M(t1(t2(1:n))) = M(t1(t2(1:n)))+1  %Incrementing elements of random n indices

如果你有Statistics and Machine Learning Toolbox,你可以使用以下更简单的 使用randsample的解决方案:

n=10; 
temp = randsample(find(M>0),n);
M(temp) = M(temp)+1

【讨论】:

  • 这个答案比@beaker 简单多了。但是对于其他人来说,一个人认为更简单的情况可能并不相同......+1。
【解决方案2】:

您可以通过创建非零元素位置的随机排列来选择要递增的元素。

m = 10;   % we want to increment 10 elements
elements = find(M);   % positions of the nonzero elements
rand_order = randperm(numel(elements), m);   % generate random permutation
M(elements(rand_order)) = M(elements(rand_order)) + 1;

randperm 确保每个非零元素只会被选择一次,随机顺序。

【讨论】:

  • 你是最棒的!谢谢你:)
  • find(M>0) 会更好(如果M 的任何元素小于零)。 (虽然在这种情况下苹果的数量不能为负)
  • @SardarUsama 是的,如果有负值并且您不希望它们增加,您应该将它们过滤掉。
  • 使用循环不利于简单的回答。
  • @TonyTannous 我们都很好......建设性的批评是建设性的。 ;)
猜你喜欢
  • 2015-02-09
  • 1970-01-01
  • 2018-12-03
  • 2020-06-09
  • 2018-09-21
  • 2012-09-17
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多