4

使用 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 调用此函数时一直这样做……它有什么特别的含义吗?

4

1 回答 1

2
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]: 

FLAGS属性:

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()无论如何都会制作副本。

如果您要在需要连续数组 的代码中使用它们,则ascontiguous调用所有loadmat数组是有意义的。可能正在做某种大步的技巧来制作(滑动)窗口。skimageCview_as_windows

于 2017-04-12T14:53:03.357 回答