scipy ndimage.rotate不适用于np.nan值

时间:2016-01-10 02:02:47

标签: python scipy

我有一个2维numpy数组,在numpy数组中的某处有np.nan值。 现在我试图将数组旋转90度。但是,scipy.ndimage.rotate不起作用。

这是一个简单的测试:

import numpy as np
from scipy import ndimage

a = np.array([[1, 2,], [3, 4]])
b = np.array([[np.nan, 2], [3, 4]])

ndimage.rotate(a, 90)
# result:
# array([[2, 4],
#        [1, 3]])

ndimage.rotate(b, 90)
# result:
# array([[ nan,  nan],
#        [ nan,  nan]])

有没有办法解决ndimage旋转的问题?

2 个答案:

答案 0 :(得分:4)

scipy.ndimage.rotate实际上是scipy.ndimage.interpolation.rotate,它表示问题:数组中的值是内插的,并且用NaN插值任何内容都会产生NaN(同上且无穷大)。

显然,Gabriel建议的rot90只是切换元素,而不需要插值。通用rotate需要插值,因为通过例如旋转42度不是元素的简单变化。

总而言之,我会说rotate 使用NaN。由于上述原因,只是不符合您的预期。

答案 1 :(得分:3)

您可以使用numpy.rot90

np.rot90(b)

[[  2.   4.]
 [ nan   3.]]

请参阅Evert's answer,了解scipy.ndimage.rotate无效的原因。