繁体   English   中英

如何将数组中每行的总和设置为等于 1?

[英]How to set the sum of each row in an array equal to 1?

我不确定是否需要 for 循环才能将每一行设置为等于 1? 我正在尝试使用随机整数创建一个二维数组,其中每行的总和为 1。

import numpy as np

a = np.random.randint(1,2, size = (13,17))

获得总和为 1 的行的 2D 正整数数组的唯一方法是每行包含全零和一个。 这可以使用这样的东西来完成

import numpy as np

# get 2D array of zeros
a = np.zeros((13, 17)).astype(int)

# loop over each row
for row in range(len(a)):
    # place a one at a random index in each row
    idx = np.random.choice(len(a[0]))
    a[row, idx] = 1

print(a)

Out[48]: 
array([[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
       [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])

“创建一个二维、13 x 17 的随机正条目数组,使得每行的总和为 1。”

如果您在问题中写的条目应该是整数,那么

a = np.zeros((13,17), dtype=np.uint8)
a[np.arange(13), np.random.randint(0,13, size=13)] = 1

除此以外:

a = np.random.randint(0, 10, size = (13,17))  # instead of 10 you can use any value >= 2
a = a / a.sum(1, keepdims=True)

# Check
a.sum(1)
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])

如果您想要正数(不是整数),那么将您的矩阵创建为 0 到 1 之间的随机数,并对每一行进行归一化:

a = np.random.rand(17,12)
a = a/np.linalg.norm(a, ord=2, axis=1, keepdims=True)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM