SETUP Win7 64b, R2015b, 16 GB di RAM, CPU i7-2700MATLAB: tavolo prevalente() metodi
Il table()
è un fundamental Matlab class che è anche sigillato, quindi non posso sottoclasse esso.
voglio correzione alcuni metodi di questa classe e aggiungere nuove quelli. Ad esempio, table.disp()
è fondamentalmente rotto, ad es. prova NON disp(table(rand(1e7,1)))
, o dimentica il ;
nella finestra di comando. La variabile richiede solo 76 MB di RAM, ma il display non ha buffer e bloccherà il tuo sistema!
- Posso ignorare metodi come
table.disp()
senza scrivere inmatlabroot\toolbox\matlab\datatypes\@table
? Posso estendere la classe tabella con un nuovo metodo in
C:\MATLAB\@table\ismatrixlike.m
? Perché ottengoismatrixlike(table) Undefined function 'ismatrixlike' for input arguments of type 'table'.
Ovviamente, ho fatto
addpath C:\MATLAB\ rehash toolboxcache
Ho anche provato
clear all
.Il percorso ha precedenza (alfabetica) su
matlabroot
, ma manca una definizione di classetable.m
. Se aggiungo la definizione di classe nativa aC:\MATLAB\@table
, allora posso eseguire il mio nuovo metodo (dopo unclear all
). Tuttavia:>> methods(table) Methods for class table: classVarNames ismatrixlike table varfun convertColumn renameVarNames unstack
elenca solo i metodi nella nuova cartella
\@table
, anche se (alcuni dei) i vecchi metodi funzionano ancora, per esempiosize(table)
Questo risolve in parte il problema, dal momento che ora, la cartella nativo
\@table\private
non è più, e quindi molti metodi nativi sono rotti accessibili!
Perché sto facendo questo? Perché non voglio aspettare altri 2 anni prima che sia stato corretto il table()
. Ho già perso interi giorni perché ho semplicemente dimenticato un ;
nella finestra di comando e non riesco a forzare un riavvio sul mio PC se sta eseguendo simulazioni multiday, ma devo aspettare che il disk-swap finisca :(.
APPENDICE Maggiori contesto su disp(table(rand(1e7,1)))
Questo è quello che succede quando ho colpito (e per fortuna io sono abbastanza veloce per CTRL-C fuori di esso):.
il colpevole è la linea 172 di table.disp()
che converte l'array numerico in una stringa di celle (anche con il padding!):
[cells, err, isLeft] = sprintfc(f, x, b);
Ottenere Matlab per fare tutto ciò che * non * è già in una cassetta degli attrezzi ... dolore garantito. Abbandona ogni speranza, voi che entrate qui! – hoosierEE
Si noti che 'istable' non è un metodo della classe della tabella, ma piuttosto una sua funzione che chiama' isa (t, 'table') '. – Suever
@Siever grazie per aver notato che. Lo cambierò in 'table.size()' – Oleg