首页 > 解决方案 > 跟踪最佳索引,同时每次迭代将矩阵减少 1x1

问题描述

设置

我有一个 NxN 对角矩阵,并且在每次迭代中将矩阵缩小 1x1。

indices = np.arange(0, np.size(n_n_matrix, 0)).tolist()
for iter in range(0, N-K)
    opt_indices = criterion(n_n_matrix)
    lost_index = [i for i in indices if i not in opt_indices][0]
    n_n_matrix = np.delete(traj_dist_matrix, lost_index, axis=0)
    n_n_matrix = np.delete(traj_dist_matrix, lost_index, axis=1)

我这样做直到我有一个 KxK 对角矩阵。如何根据它们在原始 NxN 矩阵中的位置来跟踪未删除的索引?

失败

我尝试失败:

lost_indices = [], list_indices_iter = []
>>>loop above<<<
    count_1 = sum(lost_index >= idx for idx in lost_indices_iter)
    count_2 = sum(lost_index + count_1 >= idx for idx in lost_indices_iter) - count_1
    ...
    lost_indices.append(lost_index + count_1 + count_2 ...)
    lost_indices_iter.append(lost_index)
left_opt_indices = [i for i in indices if i not in lost_indices]

缩小问题

下面的例子说明了我的问题:如果我删除索引i,下一个矩阵会缩小。如果我在下一次迭代中删除索引j>=i ,我需要将1添加到j,因为与原始 NxN 矩阵相比,它的位置减少了。如果我然后删除索引k=>j,我需要考虑之前的两个更改,依此类推。

标签: pythonarraysnumpyiterationmatrix-indexing

解决方案


更新:我的一个朋友给了我一个提示。它是一个两班轮。

tracker_original_indices = np.arange(0, np.size(traj_dist_matrix, 0))
tracker_original_indices = np.delete(tracker_original_indices, lost_index, axis=0)

推荐阅读