我想证明在垂直移动1个单位后,图片a)变成图片b),然后变成c)。下面是a,b和c的矩阵。你能帮忙吗?
a = [[1, 1], [2, 1], [3, 1]], [[1, 2], [2, 2], [3, 2]], [[1, 3], [2, 3], [3, 3]]]
shift_matrix = []
shift_unit_a = 0
shift_unit_b = 1
for item in a:
for u in range(1, 3):
shift_matrix[u][0] = item[u][0] + shift_unit_a
shift_matrix[u][1] = item[u][1] + shift_unit_b
if (np.array_equal(np.array(shift_matrix), np.array(item[u]))
shift = 1
print "True"
else:
shift = 0
print "False"
答案 0 :(得分:1)
归结为检测一组中的所有点是否都从另一组中的对应点以相同的方式移位。
def is_shift(set1, set2):
shift = None # will store a tuple of delta_x, delta_y
for (x1, y1), (x2, y2) in zip(set1, set2):
cur_shift = x1 - x1, y1 - y2
if not shift: # the first pair of points
shift = cur_shift
elif shift != cur_shift: # shifted the same way as the first one?
return False
return True
>>> is_shift([[1, 1], [2, 1], [3, 1]], [[1, 2], [2, 2], [3, 2]])
True
>>> is_shift([[1, 1], [2, 1], [3, 1]], [[1, 2], [2, 2], [3, 3]])
False
现在,由于“ set1是移位的set2”是传递关系,因此足以在第一个集合与其余每个集合之间运行is_shifted
。
尽管有一个警告。根据您对数据的假设,您可能需要确保以相同的方式对这些点进行排序,即预先对每个集合进行排序。
我认为巧妙地使用numpy
可以实现更有效的实现,但是想法是一样的。