<p>试试这个:</p>
<pre><code>import numpy as np
a=np.matrix([[0,1,1,0,0,0],
[ 0,0,1,1,1,1],
[ 0,0,0,0,0,0],
[ 0,0,0,0,1,0],
[ 0,0,0,0,0,0],
[ 0,0,0,0,0,0]]).astype(float)
concave={}
convex={}
for i,j in zip(np.nonzero(a)[0]+1,np.nonzero(a)[1]+1):
if j > i :
if i not in convex.keys():
convex[i]=[]
if j not in convex.keys():
convex[j]=[]
convex[i].append(j)
convex[j].append(i)
else :
if i not in concave.keys():
concave[i]=[]
if j not in concave.keys():
concave[j]=[]
concave[i].append(j)
concave[j].append(i)
print 'concave relations : {} and number of relations is {}'.format(concave,sum(len(v) for v in concave.values()))
print 'convex relations : {} and number of relations is {}'.format(convex,sum(len(v) for v in convex.values()))
</code></pre>
<p>给出结果:</p>
<blockquote>
<p>concave relations : {} and number of relations is 0</p>
<p>convex relations : {1: [2, 3], 2: [1, 3, 4, 5, 6], 3: [1, 2], 4: [2, 5], 5: [2, 4], 6: [2]} and number of relations is 14</p>
</blockquote>
<p>其中dictionary键是面的名称,键值是它的连接。你知道吗</p>
<p>逻辑是:</p>
<p>对于每个<strong>非零<strong>对<strong>(i,j)</strong></p>
<ul>
<li>如果i>;j,则j是面i的凹连接;i是面j的凹连接</li>
<li>如果j>;i,则j是面i的凸连接,i是面j的凸连接</li>
</ul>