擅长:python、mysql、java
<p>您的问题看起来像一个O(n<sup>2</sup>),因为您需要从<code>liste</code>中获得所有的组合。所以你必须有一个内环。你知道吗</p>
<p>您可以尝试将每一行写入一个文件,然后在以后的新进程中,从该文件创建矩阵。新进程将使用更少的内存,因为它不必存储<code>liste</code>和<code>dico</code>的大量输入。比如说:</p>
<pre><code>def make_array(liste,dico):
f = open('/temp/matrix.txt', 'w')
for i in liste:
for j in liste:
# This is just short circuit evaluation of logical or. It gets the first value that's not nothing
f.write('%s ' % (dico.get(i+"/"+j) or dico.get(j+"/"+i) or 0))
f.write('\n')
f.close()
return
</code></pre>
<p>一旦执行完毕,您就可以调用</p>
<pre><code>print np.loadtxt('/temp/matrix.txt', dtype=int)
</code></pre>
<p>我使用了短路求值来减少<code>if</code>语句的代码行。实际上,如果您使用<a href="http://www.pythonforbeginners.com/lists/list-comprehensions-in-python/" rel="nofollow">list comprehensions</a>,您可以将<code>make_array</code>函数简化为:</p>
<pre><code>def make_array(liste,dico):
return np.array([[dico.get(i+"/"+j) or dico.get(j+"/"+i) or 0 for j in liste] for i in liste])
</code></pre>