Numpy reshape przed append, czy jest potrzebne?

Numpy reshape przed append, czy jest potrzebne?
bakunet
  • Rejestracja:około 8 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Polska
  • Postów:1608
0

Nie jestem pewien czy przed wykonaniem append powinienem zmienić shape obu, czy nawet jednego ciągu numpy? Dla przykładu:

Kopiuj
#1) posiadam pierwszy ciąg:
y_pred_future = future_results[:, -1:, :] #from future_results copying an array
#2) zmieniam jego kształt na docelowy po wywołaniu `append`:
y_pred_future = np.reshape(y_pred_future, (33, 5)) #reshaping to (33, 5)
#3) następnie też zmieniam kształt drugiego ciągu:
y_pred = np.reshape(y_pred, (450, 5)) #reshaping to (450, 5)
#4) łączę ciągi:
y_pred = np.append(y_pred, y_pred_future) #combine initial y_pred result array with predicted y_pred_future
#5) i na koniec znowu muszę zmienić kształt ciągu:
y_pred = np.reshape(y_pred, (450 + 33, 5)) #reshaping to (450 + 33, 5)

Wydaje mi się, że mogę bezkarnie pominąć kroki 2) oraz 3), ale nigdzie nie mogę znaleźć potwierdzenia. Wartości są zeskalowane do nieco mi utrudnia debugowanie.

edytowany 2x, ostatnio: bakunet
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:17 minut
  • Postów:4935
0

Dokumentacja mówi, że shape muszą być identyczne.
https://numpy.org/doc/stable/reference/generated/numpy.append.html#


edytowany 1x, ostatnio: lion137
bakunet
  • Rejestracja:około 8 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Polska
  • Postów:1608
0

@lion137: Racja, choć trochę nie uściśliłem, co jeśli ciągi mają shape odpowiednio:
(165,)
(2250,)

Czy po wywołaniu append wpłynie to jakoś na strukturę danych po nadaniu ostatecznego shape przez: y_pred = np.reshape(y_pred, (450 + 33, 5))?

lion137
  • Rejestracja:około 8 lat
  • Ostatnio:17 minut
  • Postów:4935
0

Jeśli, jak napisałeś nie można debugować, w takiej sytuacji możesz eksperymentować na jakiś uproszczonych danych.


bakunet
  • Rejestracja:około 8 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Polska
  • Postów:1608
0

Taki mam zamiar, wcześniej myślałem że pytanie będzie dość tendencyjne, ale jak będę miał dłuższą chwilę to poeksperymentuję na 2 prostych tablicach i zobaczę jaki będzie efekt.

EDIT:

Kopiuj
import numpy as np

#1) reshape
a = np.arange(9)
a = np.reshape(a, (3, 3))
print(a)
b = np.arange(10, 19)
b = np.reshape(b, (3, 3))
print(b)
c = np.append(b, a)
print(c)
c = np.reshape(c, (6, 3))
print(c)

#2) without initial reshaping
x = np.arange(9)
y = np.arange(10, 19)
z = np.append(y, x)
print(z)
print(np.array_equal(c,z))  #False
print(np.array_equiv(c,z))  #False
z = np.reshape(z, (6, 3))
print(z)

print(np.array_equal(c,z))  #True
print(np.array_equiv(c,z))  #True

Wniosek: reshape przed łączeniem tablic niczego nie wnosi.

edytowany 3x, ostatnio: bakunet

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.