创建指定密度的零一矩阵函数

0 投票
3 回答
71 浏览
提问于 2025-04-11 21:41

我想创建一个函数,这个函数需要三个参数(n, m, d),它的输出应该是一个有n行m列的矩阵。这个矩阵里的值应该是0和1,随机生成,目的是确保1的数量占总数的比例是d。

这是我目前想到的代码,但我就是不知道怎么把这个“密度”变量加进去。

def create_matrix(n, m):
    count = 1
    grid = []
    while count <= n:
        for i in range(m):
            
            x = [random.randrange(0,2) for _ in range(m)]
            grid.append(x)
            count += 1
    return grid

3 个回答

-1

好的,下面是你要的内容:

在编程中,有时候我们需要把一些数据从一个地方转移到另一个地方。这就像把水从一个杯子倒到另一个杯子一样。这个过程可以通过不同的方法来实现,有些方法可能更快,有些可能更慢。

在这个过程中,我们还需要考虑到数据的格式。就像水有不同的温度,有的热有的冷,数据也有不同的类型,比如数字、文字或者图片。我们需要确保在转移数据的时候,不会让它变得混乱。

此外,编程中还有很多工具和库可以帮助我们更方便地处理这些数据。就像厨房里有各种各样的器具,可以让我们更轻松地做饭一样。

总之,数据转移是编程中一个很重要的部分,掌握了这个技能,可以让我们更高效地处理信息。

import random


def foo(row, col, d):
    N = row * col
    inds = set(random.sample(range(N), d))
    arr = [1 if i in inds else 0 for i in range(N)]
    return [arr[i:(i + col)] for i in range(0, N, col)]
    
foo(4, 5, 7)
# [[1, 0, 0, 0, 0], [0, 0, 1, 0, 1], [0, 1, 0, 0, 0], [0, 1, 1, 1, 0]]
1
import random

def create_matrix(n, m, d):
    total_elements = n * m
    total_ones = int(total_elements * d)
    matrix = [[0] * m for _ in range(n)]

    ones_indices = random.sample(range(total_elements), total_ones)

    for idx in ones_indices:
        row = idx // m
        col = idx % m
        matrix[row][col] = 1

    return matrix

# Example usage:
n = 3
m = 5
d = 0.3 

result = create_matrix(n, m, d)
for row in result:
    print(row)

输出:

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

注意:如果你提供 d=0,那么就没有任何1;如果 d=1,所有的元素都是1。

2
import random
def create_matrix(n, m, d):

    # if d is greater than multiple of n and m, return error
    if d > n*m : return f'd should be less than {n*m}'
    
    else:
        i = 0
        
        # Create a n x m matrix with all value being zero 
        mtrx = [[0 for x in range(m)] for y in range(n)]
        
        # Create a while loop with condtion i is less than d
        while i < d:

            # rest understandable with code
            r =  random.choice(range(n))
            c =  random.choice(range(m))
            
            
            if mtrx[r][c] != 1: mtrx[r][c] = 1
            else: i = i -1
            i += 1
    return mtrx

r = create_matrix(4,5, 10)
print(r)

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答