回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我想用一种更好的方法来解决的问题是:
我有一个2d索引列表,例如:</p>
<pre><code>A = [(0, 3), (2, 2), (3, 1)]
</code></pre>
<p>我的目标是现在得到一个数组</p>
<pre><code>[[H H H 0],
[H H H H],
[H H 1 H],
[H 2 H H]]
</code></pre>
<p>其中H是某个默认值(例如-1)
所以问题通常是以这种方式反转数组。你知道吗</p>
<p>如果A是内射的(没有值出现两次),我可以严格地说:</p>
<p>设A是2d指数的内射数组。
然后,生成2d数组B,使得B[i,j]=a.index((i,j))</p>
<p>或者对于不一定是内射的:</p>
<p>设A是2d指数的内射数组。
然后,生成2d阵列B,使得a[B[i,j]=(i,j)</p>
<p>更具体地说,在非内射的情况下,我们可以用一个附加的“decider”函数来解决这个问题。
说</p>
<pre><code>A = [(0, 3), (2, 2), (3, 1), (0, 3)]
</code></pre>
<p>为了解决(0,3)在位置0和位置3之间的冲突,我想对等价索引应用一些函数来寻找一个定值。你知道吗</p>
<p>例如:
具体地说,在我的例子中,我有一个与a长度相同的第二个数组C。
如果在最终2d数组中的一个“位置”的A中有多个候选(2d索引),那么所选的一个应该是A中的1d索引使C中的值最小化的那个</p>
<p>我希望这些例子能说明这个问题。
谢谢你的帮助。你知道吗</p>
<p>编辑:更多示例:</p>
<pre><code> A = [(0, 3), (2, 2), (3, 1)]
print(my_dream_func(A, default=7)
>>> [[7 7 7 0],
[7 7 7 7],
[7 7 1 7],
[7 2 7 7]]
A = [(0, 3), (2, 2), (3, 1), (0, 3)]
print(my_dream_func(A, default=7))
>>> Err: an index appears twice
</code></pre>
<p>这种情况的另一种选择是:</p>
<pre><code> def resolveFunc(indices):
c = [0.5, 2.0, 3.4, -1.9]
return(np.argmin(c[indices]))
A = [(0, 3), (2, 2), (3, 1), (0, 3)]
print(my_dream_func(A, resolveFunc, default=7))
#now resolveFunc is executed on 0 and 3
#because 0.5 > -1.9, 3 is chosen as the value for (0, 3)
>>> [[7 7 7 3],
[7 7 7 7],
[7 7 1 7],
[7 2 7 7]]
</code></pre>