2017-04-18 5 views
0

인접하지 않은 배열로 인해 코드에 문제가 있습니다. 특히 나는 다음과 같은 경고 메시지가 얻을 :column_stack은 비 cotiguous 배열을 반환합니다.

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 

를 사용하고 있지만

당신은 내가 인접하게 배열을 얻을 수있는 방법을 알고 계십니까 비 연속 배열을 얻을? column_stack 이후에 항상 ascontiguousarray을 사용해야합니까?

+1

여기서 '인접한'이란 무엇을 의미합니까? 당신이 뭔가 [이 같은] (http://stackoverflow.com/questions/26998223/what-is-the-difference-between-contiguous-and-non-contiguous-arrays) 의미합니까? 'np.column_stack'은 입력을 단순히 열 (column)로 쌓는 것이고, hstack은 입력이 공급 될 때 두 개의 다른 연산으로 hstack을 순서대로 쌓을 것입니다. – Divakar

+0

[재생할 수 없습니다.] (http://ideone.com/OgF4Xd) 그 결과는 저에게 연속적입니다. – user2357112

+0

내 편집을 참조하십시오 ... – gabboshow

답변

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 
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 코드는 column_stackhttps://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) 

그 시험은 괜찮 :

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

일반적으로 구성된 2 차원 어레이는 contiguous입니다. 그러나 그들의 전치는 F-contiguous입니다. 경고는 np.ascontiguousarray이 사본을 생성한다는 것입니다. 매우 큰 배열의 경우 문제가 될 수 있습니다.

이 경고가 자주 나타나면이 기능을 호출하기 전에 표시하지 않거나 일상적으로 ascontiguousarray을 사용하십시오.

RuntimeWarning: Cannot provide views on a non-contiguous input array without copying