【发布时间】:2017-04-30 19:26:33
【问题描述】:
我有一个由多个相同大小的图像 [N_images,width,height,3] 组成的 numpy 数组 A。
我想以最快的方式向他们每个人申请misc.imresize()。
所以我定义了:
def myfunc(x):
return misc.imresize(x,(wanted_width,wanted_height))
然后我做了:
vfunc=np.vectorize(my_func)
但是当我尝试时:
test=vfunc(A)
我收到一个 not-suitable-array-shape-for-converting-into-images 错误。 我认为这是因为我没有指定操作应该向量化的轴,这导致它没有以想要的方式广播数组操作,所以我尝试了另一种方法来缩小错误范围:
test=np.apply_along_axis(my_func,0,A)
并得到同样的错误。 即使我强制将 np.squeeze() 放入 my_func。这让我很惊讶。
编辑:我也试过map同样的错误。
正如@jotasi 所指出的那样,这可能源于您只能将矢量化与标量函数一起使用。
这一定很愚蠢,但我不知道发生了什么。有人可以启发我吗?有办法解决吗?
【问题讨论】:
-
np.vectorize没有axis参数,因为它仅用于不支持 numpy 且采用标量的函数。详情请见this answer。 -
谢谢,我不知道!那么我应该放弃尝试矢量化它还是有其他方法?
-
我认为没有一种简单的方法可以避免执行某种循环,因为
misc.imresize也不支持沿轴的矢量化应用程序。如果你的图像足够大,我猜,循环不应该代表瓶颈。 -
好的,如果有共识,我明天将结束我的问题。
-
是的。当然,我也可能会弄错。让我们看看其他人是否有什么想法。
标签: python numpy vectorization