现在我有一个3维np.array [身高,体重,3]。 (这是一张图片)我想实现一个RGB - > YUV算法自己RGB2YUV。但是,从每个像素迭代并应用变换太慢。
for x in xrange(height):
for y in xrange(weight):
img[x,y] = mat_1 * img[x,y]
有没有办法使用一些实现它的built_in方法?
答案 0 :(得分:1)
这似乎是np.einsum的一个很好的用例:
yuv_image = np.einsum('kl,ijl->ijk', transformation_matrix, rgb_image)
一旦你将这些指数写在一张纸上,就很容易想出这些指数。
显示两种方法的值相等的示例:
>>> rgb_image = np.random.rand(2*4*3).reshape(2,4,3)
>>> transformation_matrix = np.random.rand(9).reshape(3,3)
>>> z = np.empty_like(rgb_image)
>>> for x in range(rgb_image.shape[0]):
... for y in range(rgb_image.shape[1]):
... z[x,y] = np.dot(transformation_matrix, rgb_image[x,y,:])
...
>>> np.allclose(z, np.einsum('kl,ijl->ijk', transformation_matrix, rgb_image))
True