我无法绕过这个python脚本。任何python大师都喜欢翻译几行吗?我主要是谈论最后两个。这两行似乎有很多东西。我的主要动机是将此算法转换为Java。
u=matrix( [[1,2,2], [-2,-1,-2], [2,2,3]] )
a=matrix( [[1,2,2], [2,1,2], [2,2,3]] )
d=matrix( [[-1,-2,-2], [2,1,2], [2,2,3]] )
m=[ array([3,4,5]) ]
while m:
for i in m:
yield i
g=( (i*j).getA1() for i in m for j in (u,a,d) )
m=[ i for i in g if max is None or sum(i)<=max ]
答案 0 :(得分:2)
这应该更容易转换为Java:
while len(m) != 0:
for arr in m:
queue.put(arr) # yield arr
newm = []
for arr in m:
for mat in (u,a,d):
i = multiply_array_matrix(arr, mat).getA1()
if max_ is None or sum(i) <= max_:
newm.append(i)
m = newm
答案 1 :(得分:2)
感谢J.F. Sebastian以及对Python的更多调查(但主要是对J.F.),我能够将其转换为Java。我更改了这些名字不仅是为了保护无辜者,而且是为了让它更具自我记录性。
用队列替换yield功能是让我走上正轨的火花。由于Java无法在(u,a,d)&#34;中做到这一点。事情,我不得不把它分成三条非常相似的线。我已经为这个帖子修剪了一些东西,但是在我完成的代码中,我在这三行中调用了一个方法,包括&#34;&lt; = max&#34;检查。
它比我预期的要快得多!
ArrayList<int[]> resultList = new ArrayList<int[]>();
ArrayList<int[]> workingList = new ArrayList<int[]>();
workingList.add(new int[]{3, 4, 5}); // add the base triple
while(workingList.size() > 0)
{
for (int[] triple: workingList)
addTriple(resultList, triple);
ArrayList<int[]> additions = new ArrayList<int[]>();
for (int[] triple: workingList)
{
additions.add(multiply(triple, u));
additions.add(multiply(triple, a));
additions.add(multiply(triple, d));
}
workingList = additions;
}