Numpy reshape przed append, czy jest potrzebne?

0

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

#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.

0

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

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))?

0

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

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:

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1