说我们的n颜色(rgb)图像尺寸为100x100,存储在[n] [100] [100] [3]中。所以:
Channel 0 = R
Channel 1 = G
Channel 2 = B
使用numpy构建其他渠道的最有效方法是什么?例如,让我们定义:
Channel 3 = R + G * 0.5
Channel 4 = If B > 128 Then 1 Else 0
Channel 5 = If R == 100 Then 1 Else 0
Channel 6 = If (R + G) > B Then 1 Else 0
换句话说,我们想获得一个[n] [100] [100] [7],使用每个像素的上述规则构建的额外4个频道。
似乎不是在numpy中对此类操作进行矢量化的一般方法,但是我认为这里应该有一种简单情况的方法。此外,当n很大(> 10000)时,最快的方法是什么?
有相对简单的方式,例如:
rgb = np.random.random((1,2,2,3))
r,g,b = np.transpose(rgb, (3,0,1,2))
np.r_["-1, 4, 0", rgb, r+g*0.5, b>128, r==100, (r+g)>b]
# array([[[[ 0.64715017, 0.45204962, 0.28497451, 0.87317498, 0. , 0. , 1. ],
# [ 0.51238478, 0.62095329, 0.9339249 , 0.82286142, 0. , 0. , 1. ]],
# [[ 0.29647208, 0.81635033, 0.76079918, 0.70464724, 0. , 0. , 1. ],
# [ 0.3307639 , 0.1878836 , 0.04642399, 0.4247057 , 0. , 0. , 1. ]]]])
r_
串联操作员有点隐秘,如果将3串串传递为第一个参数,则意味着串联轴,深度以促进操作数,以使轴使未上调的维度与。
一个人可能会通过顺序进行预关注和计算中间体来节省一些峰值内存。
。速度,我看不到上述任何明显的改进。