朱莉娅(Julia)中有固定行总和的整数的随机矩阵

发布于 2025-01-18 08:10:21 字数 360 浏览 0 评论 0原文

我想创建一个带有以下约束的随机矩阵:

  • 所有值均应是整数值
  • 固定行总和(用第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

非常感谢您的帮助!

I would like to create a random matrix with the following constraints:

  • all values should be Integer values
  • fixed row sums (decreasing with row e.g. 100, 50, 10, 5 etc.)
  • random values from 0 to 6

I tried to create a random matrix and scale it to my fixed row sums I want, but then I get the problem that I get Float values (rounding does not help either)

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

Thanks a lot for your help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

影子的影子 2025-01-25 08:10:21

你还没有说你的随机数应该遵循什么分布,
所以我做出了一些武断的选择。

这是一个示例函数,您可以使用它来生成您想要的内容,其中 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

You have not said what distribution your random numbers should follow,
so I have made some arbitrary choice.

Here is an example function you can use to generate what you want, where n is the number of elements that have to be integers from 0 to 6, and s is their desired sum:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文