Dlaczego wstawienie nowej osi powoduje, że dane nie sąsiadują?numpy wstawianie osi sprawia, że dane nie sąsiadujące
>>> a = np.arange(12).reshape(3,4,order='F')
>>> a
array([[ 0, 3, 6, 9],
[ 1, 4, 7, 10],
[ 2, 5, 8, 11]])
>>> a.reshape((3,1,4)).flags
C_CONTIGUOUS : False
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
>>> a[np.newaxis,...].flags
C_CONTIGUOUS : False
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
>>> a.flags
C_CONTIGUOUS : False
F_CONTIGUOUS : True
OWNDATA : False
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
Zauważ, że jeśli używam C
zamawiania, to jednak utrzymać ciągły dane kiedy zmienią, ale nie kiedy dodać nową oś:
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> a.flags
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
>>> a.reshape(3,1,4).flags
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
>>> a[np.newaxis,...].flags
C_CONTIGUOUS : False
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
aktualizacji Dla tych, którzy mogą znaleźć to w wyszukiwanie, aby zachować bieżącą kolejność tablic w przekształceniu, a.reshape(3,1,4,order='A')
działa i utrzymuje przyległe tablice sąsiednie.
Dla tych, pytając „dlaczego cię to obchodzi?” Jest to część scenariusza, który jest przechodzącej tablice w Fortran celu niektórych Fortran podprogramów opracowanych przez f2py
. Procedury fortranowe wymagają danych 3D, więc uzupełniam tablice o nowe wymiary, aby uzyskać wymaganą liczbę wymiarów. Chciałbym zachować ciągłe dane, aby uniknąć zachowań związanych z kopiowaniem/kopiowaniem.
Cóż to dziwne ... –
@JoeKington - Tak. Też tak myślałem. Ponieważ odkryłem 'order = 'A'', mogę po prostu użyć' ndarray.reshape'. Wolałbym 'np.newaxis' chociaż jako' data = a [newaxis, ...] 'wydaje się być czystszy niż' data = a.reshape ((1,) + a.shape, order = 'A') ' – mgilson
Założę się, że odnosi się to do gigantycznej dyskusji na liście numpy, która ostatnio się pojawiła: http://numpy-discussion.10968.n7.nabble.com/Raveling-reshape-order-keyword-niepotrzebnie-zapasuje-index-and-memory -ordering-td33355.html Z pewnością zgadzam się, że jest to mylące! Nigdy bym nie przypuszczał, że zrobi to cięcie przez "newaxis"! –