Julia 中具有固定行总和的整数随机矩阵
Random matrix of Integers with fixed row sums in Julia
我想创建一个具有以下约束的随机矩阵:
- 所有值都应为整数值
- 固定行总和(随着行减少,例如 100、50、10、5 等)
- 从 0 到 6 的随机值
我尝试创建一个随机矩阵并将其缩放到我想要的固定行总和,但后来我得到了浮点值的问题(四舍五入也无济于事)
A = rand(0:6, 5, 10)
sum_vec = [10,5,3,2,2]
for i = 1:length(A[:,1])
# row sum
s = sum(A[i,:])
A[i,:] = (A[i,:] /s ) * sum_vec[i]
end
非常感谢您的帮助!
你还没有说你的随机数应该遵循什么分布,
所以我做了一些随意的选择。
这是一个示例函数,您可以使用它来生成您想要的内容,其中 n
是必须为 0 到 6 之间的整数的元素数,而 s
是它们所需的总和:
function fixed_sum_sample(n, s)
s > 6*n || s < 0 && throw(ArgumentError("wrong arguments"))
x = zeros(Int, n)
options = Set(1:n)
for _ in 1:s
i = rand(options) # you might want something else than uniform sampling
x[i] += 1
x[i] == 6 && pop!(options, i)
end
return x
end
我想创建一个具有以下约束的随机矩阵:
- 所有值都应为整数值
- 固定行总和(随着行减少,例如 100、50、10、5 等)
- 从 0 到 6 的随机值
我尝试创建一个随机矩阵并将其缩放到我想要的固定行总和,但后来我得到了浮点值的问题(四舍五入也无济于事)
A = rand(0:6, 5, 10)
sum_vec = [10,5,3,2,2]
for i = 1:length(A[:,1])
# row sum
s = sum(A[i,:])
A[i,:] = (A[i,:] /s ) * sum_vec[i]
end
非常感谢您的帮助!
你还没有说你的随机数应该遵循什么分布, 所以我做了一些随意的选择。
这是一个示例函数,您可以使用它来生成您想要的内容,其中 n
是必须为 0 到 6 之间的整数的元素数,而 s
是它们所需的总和:
function fixed_sum_sample(n, s)
s > 6*n || s < 0 && throw(ArgumentError("wrong arguments"))
x = zeros(Int, n)
options = Set(1:n)
for _ in 1:s
i = rand(options) # you might want something else than uniform sampling
x[i] += 1
x[i] == 6 && pop!(options, i)
end
return x
end