小编Jia*_* Lu的帖子

两个列表的深拷贝

我在python中有两个列表,它们以不同的方式(例如顺序)存储一些类实例。现在,我想出于某种目的(独立于现有列表)创建这两个列表的副本。为了清楚地说明我的问题,我在下面创建了一个演示代码。

import copy

class Node:
    def __init__(self):
        self.node_id = 0

node = Node()
list1 = [node]
list2 = [node]

u_list1 = copy.deepcopy(list1)
u_list2 = copy.deepcopy(list2)

id1 = id(list1[0])
id2 = id(list2[0])
u_id1 = id(u_list1[0])
u_id2 = id(u_list2[0])
Run Code Online (Sandbox Code Playgroud)

通过使用deepcopy的操作,我创建了两个新的列表u_list1,并u_list2独立于从list1list2,这正是我需要的。但是,我发现一个问题。在节点实例u_list1u_list2现在也是独立的。它们在内存中具有不同的地址。是否有可能在同一个实例u_list1,并u_list2仍然共享一个地址,就像在实例list1list2

我需要的是id1 = id2, u_id1 = u_id2, while id1 != u_id1

python deep-copy

5
推荐指数
1
解决办法
112
查看次数

使用多处理时对池映射操作设置时间限制吗?

pool map()在Python中使用时是否可以设置操作的时间限制multiprocessing。当达到时间限制时,所有子进程都会停止并返回它们已有的结果。

import multiprocessing as mp

def task(v):
    do something
    return result

if __name__ == '__main__':
    vs = [...]
    p= mp.Pool()
    results = p.map(task, vs)
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我有一个非常大的列表vs。理想情况下,列表中的所有元素都vs将被发送到 function task(),并且所有结果都将保存在resultslist 中。

然而,由于列表vs非常大,而且我执行此过程的时间有限(比如 5 分钟)。我需要的是在达到 5 分钟时停止该map过程,并将计算结果返回到 list results

编辑1:

我不会终止需要超过 5 分钟才能完成的任务。假设我的列表中有 1000 个任务vs,5 分钟后只完成了 600 个任务。我需要的是杀死所有子进程,并将这 600 个任务的结果保存到列表中results

python multiprocessing

5
推荐指数
1
解决办法
4998
查看次数

在 GAMS 中超出时间限制

我在 GMAS 中编写了我的 MIP 模型,求解器表明我的模型中有 1535272 行、3287490 列和 8425140 个非零值(我不确定它对 GAMS 来说是否太大)。经过 899677 次迭代(1:26:36 运行时间),GAMS 显示

资源使用,限制 1084.469 1000.000 迭代次数,限制 900026 2000000000

MIP 状态 (108):超出时间限制,没有整数解 Cplex 时间:1002.13 秒(确定 849920.06 滴答) CPLEX 错误 1217:不存在解。超出资源限制,未找到整数解。我的电脑有 i7-8700 CPU @ 3.2GHZ 和 32 RAM(计算停止时还没有用完)。我该如何处理这个问题,或者它对 GAMS 来说太大了?

integer cplex gams-math

2
推荐指数
1
解决办法
2467
查看次数

在python中使用pyqtgraph绘制立方体

我想在 python 中使用 pyqtgraph 绘制移动立方体(根据给定的数据集更新它们的位置)。我有一个示例代码如下,但我不知道如何绘制立方体而不是代码中使用的球体。另外,我很困惑为什么这段代码在第二次运行时不起作用?我必须关闭我的 spyder 然后再次打开它或重新启动内核以运行第二次运行的代码。(win10, python3.7 spyder3.3.1)

from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph.opengl as gl
import numpy as np

app = QtGui.QApplication([])
w = gl.GLViewWidget()
w.opts['distance'] = 20
w.show()
w.setWindowTitle('pyqtgraph example: GLScatterPlotItem')

g = gl.GLGridItem()
w.addItem(g)


##
##  First example is a set of points with pxMode=False
##  These demonstrate the ability to have points with real size down to a very small scale 
## 
pos = np.empty((53, 3))
size = np.empty((53))
color = np.empty((53, 4))
pos[0] …
Run Code Online (Sandbox Code Playgroud)

python pyqtgraph pyqt5

2
推荐指数
1
解决办法
2285
查看次数

无法在Visual Studio 2017中使用QT

我已经安装了'qt-vsaddin-msvc2017-2.3.0'以在Visual Studio 2017中使用QT,但是安装后存在一些问题。第一件事是我无法在Qt VS Tools中修改QT项目设置,因为它是灰色的。重新启动VS后,它一直显示“ Qt Visual Studio工具版本2.3.2:正在初始化...”,并且没有继续。安装qt-vsaddin时会错过什么吗? 在此处输入图片说明 在此处输入图片说明

c++ qt

1
推荐指数
1
解决办法
2231
查看次数

通过继承 Cython 中的 python 类构建扩展类

我想通过继承 Cython 中的 python 类来构建一个子类。看来我不能直接这样做,因为我在下面遇到了错误。有什么解决方法吗?

代码(osmium是第三方python包,可以使用安装pip):

import osmium

cdef class CounterHandler(osmium.SimpleHandler):
    cdef list nodes, ways, relations
    def __init__(self):
        osmium.SimpleHandler.__init__(self)
        self.nodes = []
        self.ways = []
        self.relations = []

    def node(self, n):
        pass

    def way(self, w):
        pass

    def relation(self, r):
        pass
Run Code Online (Sandbox Code Playgroud)

错误信息:

add.pyx:22:32: First base of 'CounterHandler' is not an extension type
Traceback (most recent call last):
  File "setup.py", line 11, in <module>
    ext_modules=cythonize("add.pyx"))
  File "C:\ProgramData\Miniconda3\envs\osmium\lib\site-packages\Cython\Build\Dependencies.py", line 1102, in cythonize
    cythonize_one(*args)
  File "C:\ProgramData\Miniconda3\envs\osmium\lib\site-packages\Cython\Build\Dependencies.py", line 1225, in cythonize_one
    raise CompileError(None, …
Run Code Online (Sandbox Code Playgroud)

python subclass cython cythonize

1
推荐指数
1
解决办法
543
查看次数