Perché non riesco a calcolare la distanza tra due array numpy?

Oct 06 2020

1.Ho avuto due array numpy che sono rispettivamente data_test e data_train

    data_partial_test = data_test[:2000,:]
    test_lable = label_test
    print(test_lable.shape)
    print(data_partial_test[0].shape)
    print(data_train[0].shape)
    dis = (( data_partial_test- data_train[:21000,])**2).sum(axis=1)

2.La forma di data_test è (21000,784) e la forma di data_train è (2000,784). Quando eseguo questo codice dice: gli operandi non possono essere trasmessi insieme alle forme (2000,784) (21000,784)

Risposte

Valdi_Bo Oct 06 2020 at 13:55

Quando esegui la sottrazione di array , come arr_1 - arr_2 , in realtà Numpy tenta:

  • per sottrarre elementi della riga 0 in arr_2 dagli elementi corrispondenti di arr_1 (anche nella riga 0 ),
  • lo stesso per la riga 1 ,
  • e così via, fino alla fine di entrambi gli array.

Questo schema funziona fintanto che entrambi gli array hanno lo stesso numero di righe e colonne.

Ci sono 3 eccezioni a questa regola:

  • Uno degli array coinvolti può avere una singola riga . Quindi questa riga viene trasmessa (ripetuta) in modo che questo array abbia concettualmente tutte le righe necessarie.
  • Uno degli array coinvolti può avere una singola colonna . Quindi la trasmissione di cui sopra avviene lungo le colonne .
  • Uno degli operandi è un singolo valore . Quindi viene "espanso" in un array con il numero di righe / colonne come nell'altro operando (array).

Leggi informazioni sulla trasmissione in Numpy per avere una visione più dettagliata su questo.

Nel tuo caso nessuna delle suddette situazioni ha luogo. Entrambi gli array hanno lo stesso numero di colonne, ma il numero di righe è diverso . La conseguenza è che la trasmissione di cui sopra non può essere eseguita e l'intera operazione fallisce.

Possibile soluzione

Forse ogni riga nel primo array (con un numero inferiore di righe) può essere "accoppiato" con una riga nel secondo array, ad esempio in base a qualche campo chiave. Tale operazione può essere eseguita in Panda . Vedi per il metodo di unione in Pandas .

Allora puoi:

  • converti entrambi i tuoi array Numpy in DataFrame pandasonic,
  • eseguire un join su questi DataFrame (basato su una chiave comune, solitamente impostata sull'indice in ogni DataFrame),
  • calcolare le differenze tra le coppie di colonne appropriate.

Allora puoi:

  • piazza queste differenze,
  • riassumerli,
  • e infine calcolare la radice della somma, ottenendo la distanza desiderata.