我如何编写一个有两个参数的函数,它应该生成任意范围位的组合,例如:
function(n,k) n=range, k=number of 1 digits. if i give 4 and 2 to function input: function(4,2)
output:1100,1010,1001,0110,0011,0101
我如何编写一个有两个参数的函数,它应该生成任意范围位的组合,例如:
function(n,k) n=range, k=number of 1 digits. if i give 4 and 2 to function input: function(4,2)
output:1100,1010,1001,0110,0011,0101
这为您提供了一个随机数字列表:
rands[n_, k_] := Module[{out},
out = Table[0, {n}];
out[[RandomSample[Range[n], k]]] = 1;
out]
rands[4, 2]
(* {1, 1, 0, 0} *)
不确定您想要什么输出形式,但您可能会使用 FromDigits。
编辑一个更干净的方法..
rands[n_, k_] := Table[0, {n - k}]~Join~Table[1, {k}] // RandomSample
编辑:根据您的评论,我猜您想要的是排列:(我想我将“任意”表示为随机......)
p[n_, k_] := Permutations[Table[0, {n - k}]~Join~Table[1, {k}], {n}]
(*
{{0, 0, 1, 1}, {0, 1, 0, 1}, {0, 1, 1, 0}, {1, 0, 0, 1}, {1, 0, 1, 0}, {1, 1, 0, 0}} *)
function[n_, k_] := Permutations[PadRight[ConstantArray[1, k], n]]
In[72]:= function[4, 2]
Out[72]= {{1, 1, 0, 0}, {1, 0, 1, 0}, {1, 0, 0, 1}, {0, 1, 1, 0}, {0, 1, 0, 1}, {0, 0, 1, 1}}
In[73]:= function[3, 1]
Out[73]= {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}