Userò qui la terminologia Python / Numpy.
Supponiamo di avere N
matrici multidimensionali a zero indici X = {x_i}
, ognuna con forma s_i
. La forma è la dimensione dell'array in una tupla, ad esempio, 5 x 3 x 4
sarebbe rappresentato come la tupla (5, 3, 4)
. Supponiamo di voler applicare una funzione N
-input f
di elementi a questi array N
, ma non sono tutti della stessa dimensione . Definisco f(0, ..., 0) = 0
. In particolare, seguono le regole di trasmissione di Numpy . Ciò che significa, in sostanza, è che, in sostanza:
- Innanzitutto, gli array mancanti di qualsiasi dimensione ottengono una dimensione aggiunta in primo piano con lunghezza 1.
- Quindi, gli array in cui alcuni sottoinsiemi hanno la dimensione
1
e un altro sottoinsieme hanno la dimensioned
, gli array con dimensione1
vengono ripetuti lungo quella dimensione in modo che siano di dimensioned
a partita. - Se, dopo questo, le dimensioni non sono uguali, l'operazione verrà ignorata.
Ora, supponiamo di avere un'implementazione sparsa di questo array, dove memorizzo solo le coordinate diverse da zero di ogni array in una matrice (number_of_dimensions, number_of_nonzeros)
-shaped. Supponiamo che questi siano ordinati in modo che la prima dimensione sia ordinata, all'interno di quella, la successiva e così via. Non voglio ripetere le coordinate per semplificare il caso di non trasmissione, in quanto sarebbe subottimale.
Il mio compito è di capire, per un tale array:
- Le coordinate in cui la funzione non viene alimentata con input tutto-zero.
- Gli indici corrispondenti delle coordinate di input lungo la direzione diverso da zero (dove esistono).
Questo è possibile dove gli array non sono trasmessi con il semplice psuedocode:
for set of inputs X_n in the power set of total inputs:
c = find coordinates common to all inputs in X_n
c' = find coordinates in any of the inputs X - X_n
set of coordinates for each input this input set is c - c'
output coordinates are c - c'
Per un caso a due input con trasmissione si semplificherà quanto segue:
match x_1 and x_2 along the common dimensions with repeats (outer join)
output_coordinates = coordinates from either of x_1 if the dimension is not repeated in x1, else from x2
if (f(anything, 0) != 0) # I want to somehow keep these optimizations
repeat x1 along the extra dimensions in x2 and store in output coordinates for all coordinates not in matches.
if (f(0, anything) != 0)
repeat x2 along the extra dimensions in x1 and store in output coordinates for all coordinates not in matches.
Qualsiasi psuedocode farà come risposta, non mi aspetto / voglio un programma completo. Quello che spero sarà chiaro è che è stata usata la coordinata di input dell'indice E quali input erano diversi da zero nell'output corrispondente.