当前位置: 首页 > 知识库问答 >
问题:

Python中是否有一些函数用于生成具有特殊条件的矩阵?

景才英
2023-03-14

我在Python上编写数据集生成器,遇到了以下问题:我需要一组没有空列/行的零一矩阵。此外,0和1之间的比率应该是恒定的。

我曾经尝试过用固定的0和1的比例来洗牌01列表,但对于具有数百行/列的矩阵来说,它太长了。我还考虑到,我不能实现一些输入,比如9个一元的3*10矩阵,一些输入只能有10个一元的10*10矩阵。

共有1个答案

狄溪叠
2023-03-14

如果我理解这项任务,类似的方法可能会奏效:

import numpy as np
from collections import defaultdict, deque

def gen_mat(n, m, k):
    """
    n: rows,
    m: cols,
    k: ones,
    """
    assert k % n == 0 and k % m == 0
    mat = np.zeros((n, m), dtype=int)

    ns = np.repeat(np.arange(n), k // n)
    ms = np.repeat(np.arange(m), k // m)
    # uniform shuffle
    np.random.shuffle(ms)
    ms_deque = deque(ms)

    assigned = defaultdict(set)
    for n_i in ns:
        while True:
            m_i = ms_deque.popleft()
            if m_i in assigned[n_i]:
                ms_deque.append(m_i)
                continue
            mat[n_i, m_i] = 1
            assigned[n_i].add(m_i)
            break

    return mat

我们首先观察到一个nxm矩阵可以用k个s.t填充。只有k可以被n和m整除。

假设此条件成立,每行索引将出现k/n次,而每列索引将出现m/k次。我们对列索引进行洗牌,以确保赋值是随机的,并将随机列索引存储在deque中以提高效率。

对于每一行,我们存储一组列s. t. mat[row,列]=1(最初为空)。现在,我们可以在每一行上循环k/n次,从deque中选择下一列s. t. mat[row,列]=0,并将mat[row,列]设置为1。

在没有损失的情况下,假设n

 类似资料:
  • 问题内容: Eclipse的源菜单有一个“ generate hashCode / equals方法”,它可以生成类似下面的函数。 如果在生成时选择多个字段,并且Eclipse使用上面显示的相同模式。 我不是哈希函数的专家,我想知道生成的哈希函数有多“好”吗?在哪些情况下会发生故障并导致过多的碰撞? 问题答案: 你可以看到的hashCode函数在执行的 这是一个这样的示例,您的Eclipse生成的

  • 条款 17:理解特殊成员函数函数的生成 在C++术语中,特殊成员函数是指C++自己生成的函数。C++98有四个:默认构造函数函数,析构函数,拷贝构造函数,拷贝赋值运算符。这些函数仅在需要的时候才生成,比如某个代码使用它们但是它们没有在类中声明。默认构造函数仅在类完全没有构造函数的时候才生成。(防止编译器为某个类生成构造函数,但是你希望那个构造函数有参数)生成的特殊成员函数是隐式public且inl

  • 问题内容: 我需要在脚本中等待,直到满足一定条件为止? 我知道我可以使用条件变量和朋友来滚动自己的事件,但是我不想经历实现它的所有麻烦,因为某些对象属性更改来自包装的C 库(Boost.Python)中的外部线程,所以我不能只是劫持 一个类并在其中放置一个条件变量,这使我要么尝试从C 创建并发送一个Python条件变量,要么包装一个本机变量并在Python中等待它,这两种声音愚蠢的,不必要的复杂和

  • 下一个;让我们调用模板化成员函数的不同实例: 最后是问题: Foo类的所有实例都来自同一个类?看来答案是肯定的但是...第一个Foo实例的末尾有f成员函数的两个重载:

  • 问题内容: 假设我需要一个3位数的电话号码,因此它类似于: 问题答案: 要获得一个随机的3位数字: (假设您实际上是指三位数,而不是“最多三位数”。) 要使用任意数量的数字: 输出:

  • 问题内容: 我玩过GTK,TK,wxPython,可可,诅咒等游戏。它们非常可怕。GTK/ TK / wx / curses似乎基本上都是适当C库的直接端口,而Cocoa基本上要求同时使用PyObjC和Interface Builder,而我都不喜欢。 用于Ruby的Shoes GUI库非常棒。它的设计非常合理,非常“红”,它从Web开发中借用了一些好用的东西(例如使用十六进制颜色代码或) 如标题