Profilo di Kolmogorov_Scale

Nome Kolmogorov_Scale
Indirizzo email [email protected]
AvatarAvatar utenti
Messaggi32
Firma forum
<< Somewhere, something incredible is waiting to be known >> [Carl Sagan]
  • Re: Sostituzione prima superdiagonale
    Forum >> Programmazione Python >> Calcolo scientifico
    Rileggendo il post mi son reso conto di aver travisato il quesito posto a @Kolmogorov Scale, che probabilmente non verteva sul come ottenere la super-diagonale bensì su come variarne i valori con metodi propri di numpy ... chiedo venia per la mia risposta fuori logo.

    In merito ai metodi di numpy (eventualmente mi si corregga) dalle ricerche effettuate non sembra sia possibile essendo il parametro "offset" implementato in funzioni tipo fill_diagonal e simili, è un argomento su cui si discute in merito ma di la da venire.




    Pur non essendo l'algebra lineare materia a me familiare, giusto per chiedere scusa della mia precedente cattiva interpretazione, ho implementato una piccola funzione per la sostituzione dei valori diagonali e/o super/sub-diagonali tramite una funzione manipolatrice od anche un iterabile, segue il codice :

    import numpy as np
    from typing import Any
    
    def my_fill_diag(a: np.array,  val: Any, o: int=0, w: bool=True) -> None:
        ''' Emulazione di numpy.fill_diagonal con applicazione delle
            sostituzioni a super e sub diagonali.
            Parametri:
            - a   : array multidimensionale cui applicare le sostituzioni;
            - val : iterabile o funzione per la definizione delle sostituzioni;
            - o   : offset rispetto alla diagonale base, se positivo sarà
                    applicato sulle colonne, se negativo sulle righe di "a",
                    nel caso superi le colonne o le righe disponibili non
                    sarà applicato;
            - w   : se vero il ciclo di sostituzione si interromperà in caso
                    si raggiunga l'ultima colonna, altrimenti si riposiziona
                    sulla prima e continua.
                    In ogni caso la sostituzione termina raggiunta l'ultima
                    riga.
            Nota: Qualora "val" sia un iterabile ed abbia dimensioni inferiori
                  a quelle della diagonale i valori saranno riproposti
                  ciclicamente.
        '''
        rows, cols = a.shape
        c = 0
        r = 0
        if o > 0 and o < cols:
            c = o
        elif o < 0 and abs(o) < rows:
            r = abs(o)
        if 'function' in repr(type(val)):
            while r < rows:
                a[r, c] = val(a[r, c])
                r += 1
                c += 1
                if c == cols:
                    if w:
                        break
                    else:
                        c = 0
        else:
            i = 0
            while i < len(val):
                a[r, c] = val
                r += 1
                c += 1
                if r == rows:
                    break
                if c == cols:
                    if w:
                        break
                    else:
                        c = 0
                i += 1
                if i == len(val):
                    i = 0
    
    
    Nella doc-string della funzione ho cercato di farne comprendere i parametri ed il funzionamento, eventuali suggerimenti per migliorarla (anche come stesura e/o elasticità) sono ben accetti




    Segue una sessione shell di test per esemplificarne l'uso :

    Python 3.12.3 (main, Sep 11 2024, 14:17:37) [GCC 13.2.0] on linux
    Type "help", "copyright", "credits" or "license()" for more information.
    from prova_01 import my_fill_diag
    import numpy as np
    A = np.arange(1, 17).reshape(4, 4)
    A
    array([[ 1,  2,  3,  4],
           [ 5,  6,  7,  8],
           [ 9, 10, 11, 12],
           [13, 14, 15, 16]])
    def my_func(value):
        return value * 2
    
    my_fill_diag(A, my_func, 1)
    A
    array([[ 1,  4,  3,  4],
           [ 5,  6, 14,  8],
           [ 9, 10, 11, 24],
           [13, 14, 15, 16]])
    A = np.arange(1, 17).reshape(4, 4)
    B = [100, 200]
    A = np.arange(1, 17).reshape(4, 4)
    my_fill_diag(A, B, 1, False)
    A
    array([[  1, 100,   3,   4],
           [  5,   6, 200,   8],
           [  9,  10,  11, 100],
           [200,  14,  15,  16]])
    A = np.arange(1, 17).reshape(4, 4)
    my_fill_diag(A, B, -1, False)
    A
    array([[  1,   2,   3,   4],
           [100,   6,   7,   8],
           [  9, 200,  11,  12],
           [ 13,  14, 100,  16]])
    
    
    Spero possa essere utile a qualcuno e rinnovo le mie scuse per la precedente interpretazione.

    I miei saluti


    Ciao pippo, scusami per il ritardo osceno ma sono stato sotto esami e ho dovuto staccarmi completamente dalla vita social.

    Alla fine ho risolto nella maniera più semplice possibile: e cioè costruendo la mia Matrice come una somma tra una matrice identità più i singoli array-valori ottenuti dal calcolo

    numerico, che andavano a riempire le superdiagonali della mia matrice di partenza.
    << Somewhere, something incredible is waiting to be known >> [Carl Sagan]
  • Sostituzione prima superdiagonale
    Forum >> Programmazione Python >> Calcolo scientifico
    Buongiorno amici pythoniani :)



    oggi quesito numpy;




    data la seguente matrice:




    A = np.array([[1,2,3],[4,5,6],[7,8,9]])


    esiste un comando numpy che consenta di fare il fill della prima superdiagonale? (quindi sostituire in un colpo l'array ([2,6]) ) ?

    Grazie in anticipo, come sempre.




    A presto :fingers-crossed: ;)


    --- Ultima modifica di Kolmogorov Scale in data 2024-09-23 12:52:17 ---

    --- Ultima modifica di Kolmogorov Scale in data 2024-09-23 12:52:34 ---
    << Somewhere, something incredible is waiting to be known >> [Carl Sagan]
  • Re: Confronto tra liste.
    Forum >> Principianti
    oppure

    >>> A = [1, 2, 3, 4]
    >>> B = [3, 4, 5, 6, 7]
    >>> C = [6, 7, 8, 9]
    >>> print(*[f"elemento in comune: {i}" for i in set(A) & set(B)] or ["niente in comune"], sep="\n")
    elemento in comune: 3
    elemento in comune: 4
    >>> print(*[f"elemento in comune: {i}" for i in set(A) & set(C)] or ["niente in comune"], sep="\n")
    niente in comune
    >>> print(*[f"elemento in comune: {i}" for i in set(B) & set(C)] or ["niente in comune"], sep="\n")
    elemento in comune: 6
    elemento in comune: 7
    
    



    Ero riuscito a scrivere una funzione simile utilizzando set &, ma avevo la necessità di operare con le liste.

    Comunque anche questo script interessante...

    Grazie.
    << Somewhere, something incredible is waiting to be known >> [Carl Sagan]
  • Re: Confronto tra liste.
    Forum >> Principianti
    Kolmogorov Scale said @ 2024-09-16 13:16:39:
    Vorrei che il programma effettui il confronto e stampi semplicemente a fine slicing "niente in comune".

    Come si può fare? le sto tentando tutte :\
    È piuttosto semplice, guarda sotto :

    Python 3.12.3 (main, Jul 31 2024, 17:43:4 8) [GCC 13.2.0] on linux
    Type "help", "copyright", "credits" or "license()" for more information.
    A = [1, 2, 3, 4]
    B = [3, 4, 5, 6, 7]
    C = [6, 7, 8, 9]
    print() if [print(f'elemento in comune: {i}') for i in A if i in B] else print('niente in comune')
    elemento in comune: 3
    elemento in comune: 4
    
    print() if [print(f'elemento in comune: {i}') for i in A if i in C] else print('niente in comune')
    niente in comune
    print() if [print(f'elemento in comune: {i}') for i in B if i in C] else print('niente in comune')
    elemento in comune: 6
    elemento in comune: 7
    
    
    Ottenuto semplicemente sfruttando le definizioni base del linguaggio python, roba che val sempre la pena di approfondire ;)




    Ciao


    È un tipo di scrittura che non avevo mai visto prima :O :|
    << Somewhere, something incredible is waiting to be known >> [Carl Sagan]
  • Confronto tra liste.
    Forum >> Principianti
    Buongiorno a tutti amici pythoniani.
    Da qualche giorno sto cercando, senza successo, di scrivere un programmino che esegua un confronto tra due o più liste e ne stampi il/gli elementi in comune.

    Non riesco però a ottenere quello che voglio nel caso in cui le due liste non abbiamo elementi comune.

    Mi spiego meglio; in questo caso l'output mi va bene;

    lista1 = [1,2,3,4]
    
    lista2 = [3,4,5,6,7]
    
    
    
    
    for i in lista1:
    
        if i in lista2:
    
            print(f"elemento in comune: {i}")
    
        else:
    
            pass
    
    #output 
    
    in comune: 3
    
    in comune: 4
    
    il problema sussiste nel momento in cui le due liste non hanno elementi in comune;

    Vorrei che il programma effettui il confronto e stampi semplicemente a fine slicing "niente in comune".

    e non

    niente in comune
    niente in comune
    niente in comune
    niente in comune


    Come si può fare? le sto tentando tutte :\
    << Somewhere, something incredible is waiting to be known >> [Carl Sagan]
  • Re: Esportare un codice per una presentazione
    Forum >> Programmazione Python >> IDE ed Editor
    Non ho esperienza diretta con il microdoft word, ho abbandonato windows nwgli anni '90, ma san google aiuta, da una ricerca in rete questa pagina mi sembra possa aiutarti.




    Per altro in libreoffice writer, sotto linux, per inserire blocchi di codice personalmente uso definire uno stile utilizzante un carattere a passo fisso, allinamento a sinistra e numerazione dei paragrafi ripartente da "1", per evidenziare il codice mi affido a dei plug-in (COOder, attualmente).




    Dai sapere, ciao


    eccomi!!! ho risolto nella maniera più semplice possibile, sono passato a libreoffice, installando COOder e lavorando personalizzando come piace a me allineamenti e colori. Best choice :fingers-crossed:
    << Somewhere, something incredible is waiting to be known >> [Carl Sagan]
  • Esportare un codice per una presentazione
    Forum >> Programmazione Python >> IDE ed Editor
    Buonasera a voi amici pythoniani.



    Dovrei allegare dei codici python ad un documento word.

    Esiste un modo per esportare un codice/copiarlo/salvarlo (senza perdere indentazione e i colori) per poi inserirlo nel mio documento word?




    Grazie a chi risponderà; a presto.



    << Somewhere, something incredible is waiting to be known >> [Carl Sagan]
  • Latex su python
    Forum >> Principianti
    Buonasera ragazzi, dovrei stampare con print dei caratteri in latex;
    per intenderci, un risultato numerico, a cui devo associare delle dimensioni fisiche (il valore di un momento d'inerzia, in millimetri alla quarta)




    print(numero mm^4) (riassunto in soldoni)




    Esiste un metodo che non sia troppo complicato? :sarcastic: non voglio appesantire il codice (già parecchio ingarbugliato) e ho trovato cose "atroci" (complicate) in giro sull'internet.




    Attendo speranzoso i vostri consigli ;)




    a presto e grazie in anticipo
    << Somewhere, something incredible is waiting to be known >> [Carl Sagan]
  • Re: Valori sui markers in matplotlib
    Forum >> Programmazione Python >> Calcolo scientifico
    Esiste anche la libreria plotly che con il passaggio del cursore sulla linea identifica il valore.

    è possibile anche segnare valori sul grafico,

    ti consigli di guardare questa pagina




    https://plotly.com/python/line-charts/




    grazie mille gabbo!


    << Somewhere, something incredible is waiting to be known >> [Carl Sagan]
  • Re: Valori sui markers in matplotlib
    Forum >> Programmazione Python >> Calcolo scientifico
    Se volessimo trovare un difetto a matplotlib potremmo dire che è "troppa", ci si perde nella abbondanza di funzioni che presenta e nelle correlazioni relative.

    Credo che il metodo più probabilmente adatto a ciò che chiedi sia "matplotlib.pyplot.annotate", ma ne esistono altri, anche specializzati per tipi di grafico ... alcuni esempi d'uso di annotate da una discussione su stackoverflow


    grazieeee

    studio tutto

    perdonate la risposta tardiva ma non ho ricevuto le notifiche
    << Somewhere, something incredible is waiting to be known >> [Carl Sagan]