假设我有一个3D numpy数组(100*100*4)
,我想将非255向量([255,255,255,255])转换为[0,0,0,255]
# genearte a numpy array
np.random.seed(seed=777)
s = np.random.randint(low=0, high = 255, size=(100, 100, 4))
print(s)
目前这是我的方法,但似乎很慢,有没有更好的方法?任何帮助都表示感谢。
def foo(x):
y= np.full_like(x, 255)
for iy, ix in np.ndindex(x.shape[0:2]):
if not np.all(x[iy, ix] == 255):
y[iy, ix] = np.array([0, 0, 0, 255])
return
5条答案
按热度按时间nuypyhwy1#
您可以执行以下操作:
goqiplq22#
使用broadcasting和布尔数组索引:
1tu0hz3e3#
您可以根据条件应用
numpy.where
来应用值:iyzzxitl4#
我使用了一个较小的数组,其中值的变化较小,这样您就可以轻松地检查我的结果。
这里的第一个想法是调整数据数组的形状,使每一行都是您要针对
(255, 255, 255, 255)
进行测试的4元组之一,第二个想法是使用.all(axis=1)
方法(thank you mozway)获得一个可用于索引视图的1D布尔数组。2nc8po8w5#
列表[NumPy]:例行公事。
这更像是一个练习:我想做一个现有的变体之间的比较(从问题和答案)。