我想用一种更好的方法来解决的问题是: 我有一个2d索引列表,例如:
A = [(0, 3), (2, 2), (3, 1)]
我的目标是现在得到一个数组
[[H H H 0],
[H H H H],
[H H 1 H],
[H 2 H H]]
其中H是某个默认值(例如-1) 所以问题通常是以这种方式反转数组。你知道吗
如果A是内射的(没有值出现两次),我可以严格地说:
设A是2d指数的内射数组。 然后,生成2d数组B,使得B[i,j]=a.index((i,j))
或者对于不一定是内射的:
设A是2d指数的内射数组。 然后,生成2d阵列B,使得a[B[i,j]=(i,j)
更具体地说,在非内射的情况下,我们可以用一个附加的“decider”函数来解决这个问题。 说
A = [(0, 3), (2, 2), (3, 1), (0, 3)]
为了解决(0,3)在位置0和位置3之间的冲突,我想对等价索引应用一些函数来寻找一个定值。你知道吗
例如: 具体地说,在我的例子中,我有一个与a长度相同的第二个数组C。 如果在最终2d数组中的一个“位置”的A中有多个候选(2d索引),那么所选的一个应该是A中的1d索引使C中的值最小化的那个
我希望这些例子能说明这个问题。 谢谢你的帮助。你知道吗
编辑:更多示例:
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
这种情况的另一种选择是:
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]]
Numpy支持同时将多个值分配给多个索引。 因此,使用这种最简单的方法编写函数将是:
如果idx中存在重复的索引,则最后一个索引元组将覆盖任何前置索引。你知道吗
我会这样做:
“decider”功能是最后的胜利。你知道吗
如果您想选择一个不同的decider函数,可以先指定/修改元组列表(和枚举),而不是尝试在numpy中做一些聪明的事情。。。你知道吗
相关问题 更多 >
编程相关推荐