Python RuntimeWarning:在不复制的情况下,无法在非连续输入数组上提供视图

Python RuntimeWarning:在不复制的情况下,无法在非连续输入数组上提供视图,python,numpy,scikit-image,contiguous,Python,Numpy,Scikit Image,Contiguous,使用skimage时,我得到以下错误: win = skimage.util.view_as_windows(x, windowSize, windowShift) C:\Program Files\Anaconda2\lib\site-packages\skimage\util\shape.py:247: RuntimeWarning: Cannot provide views on a non-contiguous input array without copying. warn(R

使用skimage时,我得到以下错误:

win = skimage.util.view_as_windows(x, windowSize, windowShift)

C:\Program Files\Anaconda2\lib\site-packages\skimage\util\shape.py:247: RuntimeWarning: Cannot provide views on a non-contiguous input array without copying.
  warn(RuntimeWarning("Cannot provide views on a non-contiguous input "
据我所知,这是因为x是一个非连续数组

我想我解决了添加我的代码
np.ascontiguousarray
的问题,如下所示:

win = skimage.util.view_as_windows(np.ascontiguousarray(x), windowSize, windowShift)
这样做对吗?注意:我每次从skimage调用这个函数时都会这样做……它有什么特别的含义吗

In [44]: from scipy.io import loadmat
In [45]: d = loadmat('test7.mat')
In [46]: d
Out[46]: 
{'__globals__': [],
 '__header__': b'MATLAB 5.0 MAT-file, written by Octave 4.0.0, 2016-09-01 15:43:02 UTC',
 '__version__': '1.0',
 'x': array([[ 1.,  2.,  3.],
        [ 4.,  5.,  6.]])}

In [48]: np.info(d['x'])
class:  ndarray
shape:  (2, 3)
strides:  (8, 16)
itemsize:  8
aligned:  True
contiguous:  False
fortran:  True
data pointer: 0xabfa13d8
byteorder:  little
byteswap:  False
type: float64
In [49]: 
标志
属性:

In [52]: x.flags
Out[52]: 
  C_CONTIGUOUS : False
  F_CONTIGUOUS : True
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True
  UPDATEIFCOPY : False
In [54]: d['x'].flags['C_CONTIGUOUS']
Out[54]: False
In [55]: d['x'].flags['F_CONTIGUOUS']
Out[55]: True
np.ascontiguous
就是这样

array(a, dtype, copy=False, order='C', ndmin=1)
如果需要获得正确的订单,它只复制(数据缓冲)一份。有关更多详细信息,请参阅
np.array
文档
x.copy()
无论如何都会复制


如果要在
skimage
代码中使用所有
loadmat
数组,则调用所有
ascontiguous
是有意义的,因为这些数组需要
C
连续数组<“代码>视图”\u因为“窗口”可能正在做一些跨步动作来制作(滑动)窗口。

如何创建此
x
?我怀疑
skimage
开发人员是否希望您在每次使用此util时看到此警告。非连续数组并不常见。我使用scipy从matlab文件中读取它…我可以在第一次加载x时使用np.ascontigousarray()。。。可以吗?加载时没有获得连续数组有点奇怪。这可能表明加载数据有问题,因此最好仔细检查
x
是否正确。除此之外,在加载后立即转换为连续的正是您最应该做的事情。可能发生的最糟糕的情况是,由于
np.ascontigousarray
需要复制数据,因此大图像的内存不足。是否有方法检查数组是否连续?