我的问题是"为什么?:"
aa[0]
array([[405, 162, 414, 0,
array([list([1, 9, 2]), 18, (405, 18, 207), 64, 'Universal'],
dtype=object),
0, 0, 0]], dtype=object)
aaa
array([[405, 162, 414, 0,
array([list([1, 9, 2]), 18, (405, 18, 207), 64, 'Universal'],
dtype=object),
0, 0, 0]], dtype=object)
np.array_equal(aaa,aa[0])
False
Run Code Online (Sandbox Code Playgroud)
那些数组完全相同.
我的最小例子不会重现这个:
be=np.array([1],dtype=object)
be
array([1], dtype=object)
ce=np.array([1],dtype=object)
ce
array([1], dtype=object)
np.array_equal(be,ce)
True
Run Code Online (Sandbox Code Playgroud)
这也不是:
ce=np.array([np.array([1]),'5'],dtype=object)
be=np.array([np.array([1]),'5'],dtype=object)
np.array_equal(be,ce)
True
Run Code Online (Sandbox Code Playgroud)
be=np.array([[405, 162, 414, 0, np.array([list([1, 9, 2]), 18, (405, 18, 207), 64, 'Universal'],dtype=object),0, 0, 0]], dtype=object)
ce=np.array([[405, 162, 414, 0, np.array([list([1, …Run Code Online (Sandbox Code Playgroud) 我有以下代码片段,我需要(大规模)加速.它是非常低效的.
possible_combos.append([comb for comb in
itertools.combinations_with_replacement(input_list, target_number_of_packages)
if np.sum([j[1] for j in comb])==target_number_of_packages])
Run Code Online (Sandbox Code Playgroud)
拆解:
possible_combos
Run Code Online (Sandbox Code Playgroud)
是输出
input_list
Run Code Online (Sandbox Code Playgroud)
是一个元组列表([...],number_of_packages)
target_number_of_packages
Run Code Online (Sandbox Code Playgroud)
是我需要达到的包数.我可以根据需要组合列表"input_list"的多个元素(允许重复),但是在添加"number_of_packages"时需要准确到达target_number_of_packages,否则组合无效.
我在考虑类似的事情
possible_combos.append([comb for comb in
itertools.combinations_with_replacement(input_list, lambda x:x=...)))
Run Code Online (Sandbox Code Playgroud)
但无法填补空白.
我的问题是,是否可以这样使用lambda?我不需要如何处理这个特定用例的答案,因为我已经解决了不同的问题(使用itertools产品作为递归生成器函数),但我仍然想知道,是否有解决方案?
简而言之:是否有可能使用lambda来改变另一个函数内的值对飞?
input_list=[1,2,3,4,5,6] #in minmal form
target_number_of_packages=4
possible_combos should be [[1,1,1,1],[2,1,1],[2,2],[3,1],[4]]
Run Code Online (Sandbox Code Playgroud)
我正在寻找大致相当于,但速度快于的东西,
possible_combos=[comb for comb in
itertools.combinations_with_replacement(input_list) if np.sum(comb)==target_number_of_packages]
Run Code Online (Sandbox Code Playgroud)
只需将np.sum(comb)== target放入itertools.combinations_with_replacement中 - 如果可能的话.
我已经改变了这个问题,因为我以不同的方式解决了潜在的问题,但其中的一部分仍然是我想知道的.由于没有答案,我认为编辑是适当的.
以下示例在新的ipython控制台(spyder)中运行时返回“ -1”,但仅在第一次尝试时返回。之后,它似乎工作正常。
from PyQt5 import QtWidgets, QtGui, QtCore
from GUI import Ui_MainWindow # importing our generated file
import sys
import numpy as np
class mywindow(QtWidgets.QMainWindow):
def __init__(self):
super(mywindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
app = QtCore.QCoreApplication.instance()
if app is None:
app = QtWidgets.QApplication(sys.argv)
application = mywindow()
application.show()
sys.exit(app.exec())
Run Code Online (Sandbox Code Playgroud)
错误如下:
> runfile('C:/Users/xxx.py',wdir ='C:/ Users / xx / Documents / 3dPackaging')发生异常,请使用%tb查看完整的追溯。
系统退出:-1
C:\ Users \ xx \ Documents \ Anaconda \ lib \ site-packages \ IPython \ core \ interactiveshell.py:2969:UserWarning:要退出:请使用“退出”,“退出”或Ctrl-D。警告(“退出:使用'退出','退出'或Ctrl-D。”,堆栈级别= 1)
%tb追溯(最近一次通话): …