我有下面的问题,我想用0生成模式。问题是这应该是节省空间的,因此我想使用一个生成器,一次创建并返回一个模式(即,我不想创建一个列表并返回它。)我在这里不知所措,因为我不知道我在调用生成器时做错了什么,所以任何帮助都将不胜感激!你知道吗
原始模式=[0。112.] 生成器应生成并返回以下内容:[0。012.], [0. 102.], [ 0. 110.]
但是,我可以通过调用生成器来生成其中一个模式(额外的1.0不是一个问题,只是为了不引起任何混乱……),而不是连续地生成所有模式。你知道吗
产生的子模式=(数组([0.,1.,0.,2.]),1.0)
以下是我的代码:
import numpy as np
def removeoneletter(subpattern):
# generator = []
originalpattern = subpattern
subpatterncopy = subpattern.copy()
nonzero = np.nonzero(subpattern)
listnonzero = nonzero[0].tolist()
# only replace elements at nonzero positions with zero
for i in listnonzero:
subpatterncopy = subpattern.copy()
position = i
transaction = subpatterncopy[i]
np.put(subpatterncopy, position, 0)
print('subpattern generator')
print(subpatterncopy)
# generator.append((subpatterncopy, transaction))
yield((subpatterncopy, transaction))
if i == len(listnonzero):
break
函数被另一个函数调用,如下所示:
def someotherfunction():
combinations = removeoneletter(subpatterncopy)
for x in combinations:
# x = next(combinations)
print('yielded subpattern')
print(x)
不是一个裸体专家,这部分在我看来有点奇怪:
for循环将listnonzero的元素分配给i,然后根据列表的长度进行测试。如果listnonzero有五个元素[5,42,6,77,12],并且您从列表中选择的第一个元素恰好是数字5,那么您将中断循环并在第一次迭代后退出。你知道吗
您的代码(可能)使用Javascript或类似的语言,其中“for i in something”将索引分配给i,而不是列表成员。你知道吗
如果这没有帮助,请尝试删除yield并在那里添加print语句,以查看您的listnonzero和i是否是您所期望的。你知道吗
只是一个想法。你知道吗
汉努
相关问题 更多 >
编程相关推荐