【发布时间】:2018-08-07 14:15:30
【问题描述】:
我有什么
我创建了一个函数来为给定的行数和列数以及给定的可能值列表生成所有可能的矩阵。
def generate_matrices(rows, columns, values):
"""Returns an iterable over all possible matrices for a given
number of rows and columns and a given list of possible
values.
Arguments:
rows -- number of rows desired for each matrix
columns -- number of columns desired for each matrix
values -- list of values desired for iteration
Returns:
returns an iterator over the generated matrices
Dependencies:
requires the itertools library (`import itertools`)
"""
x = itertools.product(values, repeat = columns)
y = itertools.product(x, repeat = rows)
return y
我需要什么
这适用于小输入(少量行和列,少量值),但对于较大的输入,所有系统内存都用于处理函数。
我怎样才能最小化这个函数的内存消耗和处理时间?
这些矩阵的目的是为一组函数提供测试值,以最大化特定公式的输出。如果有更好的方法来测试可变数量的变量和变量范围的所有可能输入,请告知。
【问题讨论】:
-
您真的需要测试地球上所有可能的矩阵吗?你为什么不使用hypothesis testing 让框架发挥它的魔力(比如自动缩小哪些矩阵和哪些值会破坏测试)?
-
什么太大了,所有
y的列表或只是一个迭代。我不知道将x放入y会做什么。 -
itertools.product创建一个迭代器,而不是一个列表。如果你一个一个地迭代所有元素,它不应该消耗很多内存。您是否将迭代器转换为列表或做了类似的事情? -
@Dabiuteef 问题是第二个
itertools.product需要运行第一个的结果才能开始生产元素。 -
@NilsWerner 你说的很对——我从错误的角度来处理这个问题。我不会测试所有存在的矩阵,而是只测试那些在给定函数约束的情况下可能出现的矩阵。
标签: python-3.x numpy matrix simulation itertools