1 回答

TA贡献2039条经验 获得超8个赞
如果只能跨列交换:
通过行最大化,我假设您的意思是您可以在数组中垂直交换以使行最大化。在这种情况下,可以通过 numpy 完成,如下所示:
(np.argmax(np.array(input_matrix), axis = 0)!=r).sum()
这里的技巧是找到每列的最大元素,然后如果它不在所需的行(即 r)中,则将其计为交换,因为这就是您需要交换和求和的地方。
如果您可以交换数组中的任何元素:
如果您可以从整个数组中获取值,则需要更复杂的机制,如下所示:
def largest_indices(ary, n):
"""Returns the n largest indices from a numpy array."""
flat = ary.flatten()
indices = np.argpartition(flat, -n)[-n:]
indices = indices[np.argsort(-flat[indices])]
return np.unravel_index(indices, ary.shape)
(largest_indices(np.array(input_matrix), len(input_matrix[0]))[0]!=r).sum()
它继续查找n
数组中的最大元素,找到它们的索引,如果它们不在所需的行中,则将它们计为交换并返回交换总数。
添加回答
举报