建立权重矩阵,使其有效地求和

如何解决建立权重矩阵,使其有效地求和

我正在创建一个线性组合生成器和测试器。目的是测试N个输入的所有线性组合,以确定哪个产生最佳得分。

创建权重矩阵的方法可以强制执行,如下所示。但是,当可以有2个以上没有上限的模块时,这在应用程序中并不灵活。有没有办法概括这些代码

以矩阵形式生成输出也是理想的,因此我可以简单地将输入矩阵与标量相乘以获得线性组合输出

编辑:完全明确。我正在寻找一种灵活引用的方式

for i in range...: 
   for j in range...: 
       for k in range...

用于2、3、4,+个模块

def generate_weights(n=4,min_weight=0,max_weight=100):
    weight_dictionary = {}
    combination = 1
    for i in range(0,101):
        for j in range(0,101):
            for k in range(0,101):
                for l in range(0,101):
                    # For Now,ignoring conditions on each individual scalar's min and max weight criteria
                    if i + j + k + l == 100:
                        weight_dictionary[combination] = (i,j,k,l)
                        combination+=1
    return weight_dictionary

test = generate_weights()

解决方法

由于“ i + j + k + l == 100”,您不需要每次都计算范围0〜100,因此可以限制范围并排除不可能的值,例如:

    for i in range(0,101):
        for j in range(0,101-i):
            for k in range(0,101-i-j):
                for l in range(0,101-i-j-k):

之前的时间复杂度:O(n ** 4)

>>> test = generate_weights()
Time:  12.879271500000016

时间复杂度:O(n * log(n))

>>> test = generate_weights()
Time:  0.6409992999999758
,

应对未知深度的堆叠循环的最简单方法通常是使用递归。每次该函数运行时,它都会运行一个循环,递归深度将给出堆栈。

import numpy as np

def generate_weights0( layers = 4,tgt = 100 ):
    """ Generate list of lists with 'layers' items adding to tgt """
    result = []

    def one_layer( layers,tgt,cumul ):
        """  layers: layers still to produce.
             tgt: the tgt still left to be consumed.
             cumul: a list of the combinations for the layers already processed.
        """
        if layers == 1: # return results for the last layer
            cumul.append( tgt )
            result.append( cumul )
        else:
            # For each i call one_layer with revised parameters
            for i in range( tgt + 1 ):
                cumul_ = cumul.copy()
                cumul_.append( i )
                # Recursive call with updated parameters
                one_layer( layers - 1,tgt - i,cumul_ )

    one_layer( layers,[] )  # Execute the initialised function
    return np.array( result )

以上假设min为零,返回结果。为了避免复杂性,有第二个函数调用上面的函数,将参数调整为最小值。然后将最小值添加到所有结果中。

def generate_weights( layers = 4,min_ = 0,tgt = 100 ):
    tgt = tgt - ( layers * min_ )
    return generate_weights0( layers,tgt ) + min_

我认为这将返回您的预期。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?