删除二维NumPy数组中的二维唯一元素



我使用生成一组唯一的坐标组合

axis_1 = np.arange(image.shape[0])
axis_1 = np.reshape(axis_1,(axis_1.shape[0],1))
axis_2 = np.arange(image.shape[1])
axis_2 = np.reshape(axis_2,(axis_2.shape[0],1))

coordinates = np.array(np.meshgrid(axis_1, axis_2)).T.reshape(-1,2)

然后我检查一些条件,如果满足,我想从数组中删除坐标。类似这样的东西:

if image[coordinates[i,0], coordinates[i,1]] != 0:
remove coordinates i from coordinates

我尝试了remove和delete命令,但其中一个不适用于数组,另一个只是删除坐标[I,0]和坐标[I、1]出现的每个实例,而不是两者的唯一组合。

您可以使用np.where生成应删除的坐标对,并使用np.unique结合掩码来删除它们:

y, x = np.where(image > 0.7)
yx = np.column_stack((y, x))
combo = np.vstack((coordinates, yx))
unique, counts = np.unique(combo, axis=0, return_counts=True)
clean_coords = unique[counts == 1]

这里的想法是将原始坐标和要删除的坐标叠加在同一个数组中,然后删除两者中出现的坐标。

您可以使用numpy.delete函数,但该函数返回一个新的修改过的数组,并且不会在适当的位置修改数组(这会很有问题,特别是在for循环中(。

所以你的代码看起来是这样的:

nb_rows_deleted = 0
for i in range(0, coordinates.shape[0]):
corrected_i = i - nb_rows_deleted
if image[coordinates[corrected_i, 0], coordinates[corrected_i, 1]] != 0:
coordinates = np.delete(coordinates, corrected_i, 0)
nb_rows_deleted += 1

corrected_i考虑到在循环过程中已经删除了一些行。

最新更新