2015-11-06 40 views
1

我现在只是在学习matlab。我在连续创建3个元素的数组时遇到了困难。 我写了一个代码创建一个数组1 * 3,其中只包含一个1,其余部分0

Source = randi([0,1],1,3);

这给了我输出

[1,1,0] ..... [0,1,1] ...

,但我还是愿意让只有一个1和输出中有两个零而不是两个1和一个零。 我知道我错了,因为我正在使用randi函数并给出了随机值0 & 1并且我得到的输出可以是[0,0,1] ... [1,0,0] ...也是。

我明确的问题是如果我重复多次,只得到一个1。例如我应该只得到[0,0,1]或[0,1,0]或[1,0,0]。

希望我能得到解决方案。 谢谢。 Ujwal

回答

3

下面是使用randperm方式:

n = 3; %// total number of elements 
m = 1; %// number of ones 
x = [ones(1,m) zeros(1,n-m)]; 
x = x(randperm(numel(x))); 
+0

大,效果很好。我执行了10次迭代。 for i = 1:10; n = 3; m = 1; Source = [ones(1,m)zeros(1,n-m)]; 目的地= [ones(1,m)零(1,n-m)]; Source = Source(randperm(numel(Source))); Destination = Destination(randperm(numel(Destination))); 结束 – Ujwal

0

这里是一对夫妇对你的问题的替代解决方案。

创建零填充的矩阵,并设置随机元素之一:

x = zeros(1, 3); 
x(randi(3)) = 1; 

创建1x3eye矩阵,随机circshift它:

x = circshift(eye(1,3), [0, randi(3)]); 
+0

它是有用的,并提供完美的输出。 – Ujwal

相关问题