我目前正在尝试使用 Atari 模块进行gym/openai。我已成功安装依赖项。
Patricks-MacBook-Pro:~ patrickmaynard$ python3.6 -m pip install gym[atari]
Requirement already satisfied: gym[atari] in /usr/local/lib/python3.6/site-packages (0.10.5)
Requirement already satisfied: six in /usr/local/lib/python3.6/site-packages (from gym[atari]) (1.11.0)
Requirement already satisfied: pyglet>=1.2.0 in /usr/local/lib/python3.6/site-packages (from gym[atari]) (1.3.2)
Requirement already satisfied: requests>=2.0 in /usr/local/lib/python3.6/site-packages (from gym[atari]) (2.18.4)
Requirement already satisfied: numpy>=1.10.4 in /usr/local/lib/python3.6/site-packages (from gym[atari]) (1.14.3)
Requirement already satisfied: Pillow; extra == "atari" in /usr/local/lib/python3.6/site-packages (from gym[atari]) (5.1.0)
Requirement already satisfied: PyOpenGL; extra == "atari" in /usr/local/lib/python3.6/site-packages (from gym[atari]) (3.1.0)
Requirement already satisfied: …Run Code Online (Sandbox Code Playgroud) 我正在尝试搜索方程的整数解:
y^2 + x^2 = 2n^2
Run Code Online (Sandbox Code Playgroud)
如果我在Wolfram alpha中搜索它们,即使是非常大的n也会几乎立即找到它们。当我实施暴力破解方法时,它非常慢:
def psearch(n, count):
for x in range(0, n):
for y in range(0, n):
if x*x + y*y == 2*n**2:
print(x,y)
count += 1
return count
Run Code Online (Sandbox Code Playgroud)
因此,我假设有一种更快的方法来获取上述方程式的所有整数解。我该如何在python中做到这一点,以使其运行时间大大缩短?
注意:我已经看到了这个问题,但是它是关于在圆内找到晶格点,而不是圆方程的整数解。我也有兴趣寻找特定的解决方案,而不仅仅是解决方案的数量。
编辑:我仍在寻找更快数量级的东西。这是一个示例:n = 5应该具有12个整数解,以找到应该在Wolfram alpha上搜索该方程的整数。
编辑2:@victor zen对这个问题给出了惊人的答案。谁能想到进一步优化其解决方案的方法?
我试图找到最有效的方法来检查此列表中的任何两个数字是否与使用 Python 的列表中的另一个数字相加。我决定添加一些上下文,以使这更清楚并且可能更容易优化。这是我的代码:
import numpy as np
from collections import Counter
from collections import deque
def gen_prim_pyth_trips(limit=None):
u = np.mat(' 1 2 2; -2 -1 -2; 2 2 3')
a = np.mat(' 1 2 2; 2 1 2; 2 2 3')
d = np.mat('-1 -2 -2; 2 1 2; 2 2 3')
uad = np.array([u, a, d])
m = np.array([3, 4, 5])
while m.size:
m = m.reshape(-1, 3)
if limit:
m = m[m[:, 2] <= limit]
yield from m
m …Run Code Online (Sandbox Code Playgroud)