2012-10-05 46 views
1

我有一个numpy数组'image',它是一个二维数组,其中每个元素都有两个组件。我想将其转换为另一个二维数组,其中每个元素都有三个组件。前两个和第三个来自前两个计算的,就像这样:将计算值元素添加到多维numpy数组的快速方法

for x in range(0, width): 
    for y in range(0, height): 
     horizontal, vertical = image[y, x] 

     annotated_image[y, x] = (horizontal, vertical, int(abs(horizontal) > 1.0 or abs(vertical) > 1.0)) 

这个循环按预期工作,但相对于其他numpy的功能是很慢的。对于中等尺寸的图像,这需要30秒的时间。

有没有不同的方法来做同样的计算,但更快?原始图像数组不必保留。

回答

4

你可以只分离图像的部件,并与多张图片,而不是工作:

image_component1 = image[:, :, 0] 
image_component2 = image[:, :, 1] 

result = (np.abs(image_component1) > 1.) | (np.abs(image_component2) > 1.) 

如果由于某种原因,需要你指定你还可构造另一个三维图像的布局:

result = np.empty([image.shape[0], image.shape[1], 3], dtype=image.dtype) 

result[:, :, 0] = image[:, :, 0] 
result[:, :, 1] = image[:, :, 1] 
result[:, :, 2] = (np.abs(image[:, :, 0]) > 1.) | (np.abs(image[:, :, 1]) > 1.) 
+0

辉煌,正是我期待的! –

相关问题