我使用生成一组唯一的坐标组合
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
考虑到在循环过程中已经删除了一些行。