12 개의 다른 배열 값이있는이 예제가 도움이 될 것입니다.
In [207]: x=np.arange(12).reshape(3,4).copy()
In [208]: x.flags
Out[208]:
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
...
In [209]: x.T.flags
Out[209]:
C_CONTIGUOUS : False
F_CONTIGUOUS : True
OWNDATA : False
...
C order
값은 생성 된 순서에 있습니다. 전치 사람이 아니다
In [212]: x.reshape(12,) # same as x.ravel()
Out[212]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
In [213]: x.T.reshape(12,)
Out[213]: array([ 0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11])
둘 다 1d 뷰를 얻을 수 있습니다.
In [214]: x1=x.T
In [217]: x.shape=(12,)
의 모양 x
도 변경할 수 있습니다.
In [220]: x1.shape=(12,)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-220-cf2b1a308253> in <module>()
----> 1 x1.shape=(12,)
AttributeError: incompatible shape for a non-contiguous array
그러나 조옮김의 모양은 변경할 수 없습니다. 는 data
여전히 0,1,2,3,4...
로서 액세스 액세스 할 수없는 위해, 0,4,8...
1 차원 배열이다.
그러나 복사본은 x1
변경할 수 있습니다.
In [227]: x2=x1.copy()
In [228]: x2.flags
Out[228]:
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
...
In [229]: x2.shape=(12,)
보는 strides
것도 도움이 될 수 있습니다. strides는 다음 값에 도달하기 위해 얼마나 멀리 (바이트) 이동해야 하는지를 나타냅니다. 2d 배열의 경우 2 개의 stride 값이 있습니다.
In [233]: x=np.arange(12).reshape(3,4).copy()
In [234]: x.strides
Out[234]: (16, 4)
다음 행으로 이동하려면 16 바이트 단계, 다음 열만 4.
In [235]: x1.strides
Out[235]: (4, 16)
조옮김은 보폭의 순서를 전환합니다. 다음 행은 4 바이트, 즉 다음 숫자입니다.
In [236]: x.shape=(12,)
In [237]: x.strides
Out[237]: (4,)
모양을 변경하면 보폭도 변경됩니다. 버퍼를 한 번에 4 바이트 씩 이동하면됩니다.
In [238]: x2=x1.copy()
In [239]: x2.strides
Out[239]: (12, 4)
비록 x2
처럼 보이는 x1
, 그것은 다른 순서 값으로 자신의 데이터 버퍼를 가지고 있습니다. 다음 열은 이제 4 바이트 이상이고 다음 행은 12 (3 * 4)입니다.
In [240]: x2.shape=(12,)
In [241]: x2.strides
Out[241]: (4,)
에서처럼 x
모양을 1d로 변경하면 보폭이 (4,)
.
의 경우 x1
데이터를 0,1,2,...
순서대로 사용하면를 줄 1d 보폭이 없습니다 0,4,8...
.
__array_interface__
배열 정보를 표시하는 또 다른 유용한 방법입니다.
In [242]: x1.__array_interface__
Out[242]:
{'strides': (4, 16),
'typestr': '<i4',
'shape': (4, 3),
'version': 3,
'data': (163336056, False),
'descr': [('', '<i4')]}
x1
데이터 버퍼 주소로써 동일하게 나타날 x
이 데이터를 공유하는로. x2
버퍼 주소가 다릅니다.
order='F'
매개 변수를 copy
및 reshape
명령에 추가하여 실험 할 수도 있습니다 .