1 回答

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果只能跨列交換:
通過行最大化,我假設(shè)您的意思是您可以在數(shù)組中垂直交換以使行最大化。在這種情況下,可以通過 numpy 完成,如下所示:
(np.argmax(np.array(input_matrix), axis = 0)!=r).sum()
這里的技巧是找到每列的最大元素,然后如果它不在所需的行(即 r)中,則將其計(jì)為交換,因?yàn)檫@就是您需要交換和求和的地方。
如果您可以交換數(shù)組中的任何元素:
如果您可以從整個(gè)數(shù)組中獲取值,則需要更復(fù)雜的機(jī)制,如下所示:
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()
它繼續(xù)查找n
數(shù)組中的最大元素,找到它們的索引,如果它們不在所需的行中,則將它們計(jì)為交換并返回交換總數(shù)。
添加回答
舉報(bào)