使用matlab,我喜欢用二进制值[0 1]用百分比改变我的矩阵:
示例:
矩阵= [0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0]
如何以20%百分比或30%或x%百分比更改此矩阵。
谢谢。
答案 0 :(得分:1)
这可以使用randperm
- 函数来查找索引并对这些索引应用not()
- 函数,以便将True更改为False,反之亦然。如果x
是矩阵的百分比,应该更改,代码可能如下所示:
Matrix = [ 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0];
% //find number and indices of matrix elements to change
x = 0.2; % relative percentage
n = round(numel(Matrix)*x); % // num of elements to change
idx = randperm(numel(Matrix));
idx = idx(1:n); % // take the first n random indices
% // apply the change on elements
Matrix(idx) = not(Matrix(idx)); % // 0->1, 1->0 at indices idx
为了了解会发生什么,这里有一个示例,其中x=0.2
我们需要更改矩阵的n=6
元素
% Explanation in an example
idx % // [22 16 30 18 6 10]
Matrix_original(idx) % // [1 0 0 0 1 1]
Matrix(idx) % // [0 1 1 1 0 0]
因此对于这6个索引,所有的索引现在为零,而现在全部为零。
答案 1 :(得分:0)
matr= zeros(10);
ratio= 20;
No_of_ones=round(numel(matr)/100*ratio);
No_of_zeros=numel(matr)-No_of_ones;
helper=[ones(No_of_ones,1);zeros(No_of_zeros,1)];
new_order= randperm(numel(matr));
new_matr=helper(new_order);
matr= reshape(new_matr,size(matr,1),size(matr,2));
matr:是矩阵(在这种情况下是10x10)
比率:是百分比的比率。
然后我计算零和一的数量。我构造了一个1-dim数组,其中包含1和0的确切数字(如果比率不是元素数量的除法,则舍入1)在将它们与randperm
一起随机排列之前。
最后但并非最不重要的是,我将它们重塑为所需的输出(10x10)。