0

我的代码中有非连续数组的问题。特别是我收到以下警告消息:

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 "

我正在使用np.column_stack

import numpy as np
x = np.array([1,2,3,4])

y = np.array([5,6,7,8])

stack = np.column_stack((x,y))

stack.flags.f_contiguous
Out[2]: False

但我得到一个不连续的数组

你知道我怎样才能得到连续数组吗?我应该总是ascontiguousarray在之后使用column_stack吗?

4

2 回答 2

0

np.stack([x, y])不连续。然而,np.stack([x, y]).T是。

np.stack([x, y])  # Transpose of what you want and not contiguous

array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

反而:

stack = np.stack([x, y]).T
于 2017-04-18T19:55:29.290 回答
0
In [276]: xy=np.column_stack((x,y))
In [277]: np.info(xy)
class:  ndarray
shape:  (4, 2)
strides:  (8, 4)
itemsize:  4
aligned:  True
contiguous:  True
fortran:  False
data pointer: 0xa836ec0
byteorder:  little
byteswap:  False
type: int32

skimage代码,https: //github.com/scikit-image/scikit-image/blob/master/skimage/util/shape.py

# -- build rolling window view
if not arr_in.flags.contiguous:
    warn(RuntimeWarning("Cannot provide views on a non-contiguous input "
                        "array without copying."))

arr_in = np.ascontiguousarray(arr_in)

那个测试,就column_stackOK了:

In [278]: xy.flags.contiguous
Out[278]: True
In [279]: xy.T.flags.contiguous
Out[279]: False

通常构造的二维数组是contiguous. 但他们的转置是F-contiguous。警告是np.ascontiguousarray会产生一个副本。对于可能是一个问题的非常大的阵列。

如果这个警告经常出现,你可以抑制它,或者ascontiguousarray在调用这个函数之前经常使用它。

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

于 2017-04-18T20:51:05.177 回答