trasmissione automatica è abbastanza nuova funzione Octave che getta in un bsxfun ovunque ci sia una mancata corrispondenza dimensione tra un Singleton e dimensione non Singleton.
In questo caso
X_poly = X^poteri.;
è sostituito con
X_poly = bsxfun (@Power, X, poteri);
Questo è perfettamente un comportamento legale di ottava e inoltre sembra essere esattamente ciò che si vuole fare, quindi non si per cambiarlo affatto.
L'avviso è perché Matlab non supporta la trasmissione automatica in modo che vogliano ricordare all'utente se si è tentato di eseguire questo codice in Matlab.
Inoltre, la pratica comune tra molti programmatori Octave è di affidarsi principalmente alla mancata corrispondenza delle dimensioni come metodo per rilevare i bug nel proprio programma.Una volta ho persino seguito una lezione di machine learning in cui il prof ha detto all'intera classe "Se tutte le dimensioni sono allineate, allora probabilmente è corretto". Questo è un terribile, terribile consiglio e un modo sicuro per assicurarsi che tutti falliscano i compiti a casa, ma riflette un approccio comune tra molti ricercatori a scrivere programmi Matlab/Octave.
Per questo motivo, l'introduzione della trasmissione automatica senza alcun avviso potrebbe causare difficoltà di tracciamento dei bug per te se non hai l'abitudine di fare esplicite asserzioni sugli input delle tue funzioni.
Se si vuole sbarazzarsi del l'avviso, si può semplicemente aggiungere
warning("off", "Octave:broadcast");
al codice.
Se si vuole mantenere una migliore compatibilità Matlab o semplicemente non utilizzare la trasmissione automatica e preferisce avere errore di ottava per aiutare a isolare i bug, è possibile aggiungere
warning ("error", "Octave:broadcast");
invece.
Beh, avrei potuto usare bsxfun, ma per motivi di esercizio volevo implementare questo comportamento da solo. L'unica cosa necessaria per far funzionare il mio codice è trasformare X anche allora. powers = ones (numel (X), 1) * linspace (1, p, p); Xs = X * ones (1, p); X_poly = Xs.^Powers; Grazie mille;) –
"Penso che dovrebbe essere semplicemente un errore, ma l'octave sta apparentemente cercando di capire cosa intendi invece di ciò che hai scritto, ma poi ti avvisa che sta indovinando". Non è questa la ragione. Parte del linguaggio Octave è la trasmissione automatica (ispirata a NumPy), quindi ciò che scrivi in quelle situazioni * è * la trasmissione. Il motivo dell'avvertimento è che è una nuova funzionalità e può sorprendere le persone. Questi tipi di avvertenze vengono solitamente rimossi dopo 2 rilasci. – carandraug
@carandraug: Beh, la domanda è anche etichettata 'matlab', ed è illegale lì. –