Chcę iterować po tablicy numpy i wykonać kilka obliczeń na wartościach. Jednak rzeczy nie są zgodne z oczekiwaniami. Aby pokazać, o co mi chodzi, po prostu napisałem ten kod, aby odczytać wartości z tablicy numpy i przenieść je na inną listę.
a = array([1,2,1]).reshape(-1, 1)
u = []
for i in np.nditer(a):
print(i)
u.append(i)
print(u)
Zgodnie z samouczkiem, nditer
wskazuje na elementy i jako print(i)
pokazuje, i
to wartość. Jednak kiedy dołączam i
do tablicy, tablica nie przechowuje wartości. Oczekiwany wynik to u = [1, 2, 1]
, ale wynik kodu to
1
2
1
[array(1), array(2), array(1)]
Co dokładnie oznacza array(1)
i jak mogę to naprawić?
PS: Wiem, że za pomocą .tolist()
mogę przekonwertować tablicę numpy na tablicę standardową. Jednak w tym kodzie chcę iterować po numpy elementów.
2 odpowiedzi
Jak już wyjaśniono w poprzednim pytaniu, numpy.nditer
daje numery tablic. To, co pokazuje print, jest tylko reprezentacją obiektu, a nie zawartością lub typem obiektu (np. 1
i '1'
mają tę samą reprezentację, a nie ten sam typ).
import numpy as np
a = np.array([1,2,1]).reshape(-1, 1)
type(next(np.nditer(a)))
# numpy.ndarray
Masz po prostu tablicę zerowymiarową:
np.array(1).shape
# ()
Nie ma potrzeby używania numpy.nditer
tutaj. Jeśli naprawdę chcesz iterować wiersze swojej tablicy z pojedynczą kolumną (i nie używać tolist
), użyj:
u = []
for i in a[:,0]:
u.append(i)
u
# [1, 2, 1]
__repr__
na każdym elemencie w środku. W przypadku niektórych przedmiotów __str__
i __repr__
są takie same, ale tak nie jest
numpy.nditer
faktycznie zwraca tablicę numpy. Jeśli chcesz uzyskać rzeczywistą wartość tego przedmiotu, możesz użyć wbudowanej funkcji item()
:
a = array([1,2,1]).reshape(-1, 1)
u = []
for i in np.nditer(a):
u.append(i.item())
print(u)
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.
i
, zobaczyłbyś, że jest to typ<class 'numpy.ndarray'>
array
z jednym elementem.np.nditer
na pierwszym miejscu?a
na tablicę o kształcie(3,1)
, co sprawia, że jest to tablica d=2, więc każda iteracja zwróci tablicę d=1. Jeśli najpierw go spłaszczysz, załatwi sprawę:for i in a.flatten(): u.append(i)
i
i toprint(i)
mnie zmyliło.