Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności: PyStok #42 - wystąpią Łukasz Langa i Dominik Kozaczko
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: Macierze w pythonie  (Przeczytany 3715 razy)
« : 18:55 05/04/18 »
driller12 Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 1


Witajcie.
Chce napisać program który buduje macierz zerojedynkowa w postaci A[i,j]= val, z tym, że jeśli i=j to wartość macierzy jest automatycznie 0, oraz jezeli juz wypisze ze np A[1,2] = 1, to automatycznie A[2,1] uzupełnia się 1.
Moj kod wyglada tak:
Kod
n = int(raw_input("Podaj wymiar macierzy: ") )
t = [ 0 for i in range(n * (n+1)/2) ]
def idx(i,j,n):
        idx[min(i, j), max(i, j)] = val
        return i * n+j
 
for i in range(n):
       for j in range( int(n) ):
               t[ n * i + j ] = int(raw_input("A[%i,%i] = " % (i + 1, j + 1) ) )
 
print "\nWczytana macierz:"
 
for i in range(n):
       for j in range(n):
               print "A[%i,%i] = %i\t" % (i + 1, j + 1, t[ n * i + j ]),
 
       print "\n",
 
Zapisane
« Odpowiedz #1 : 13:09 25/04/18 »
Wawrzyn2 Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 1


Mam ten sam właśnie problem i nie wiem jak go rozwiązać. Myśle, że nie jedna osoba zastanawia się jak to zrobić.
_____
http://plexinawymiar.pl
Zapisane
« Odpowiedz #2 : 16:26 25/04/18 »
DJangoL Offline
Professional Python User

Zobacz profil
***

Reputacja: 30
Wiadomości: 427


Jakiś czas temu napisałem sobie mały programik do obliczania wyznaczników (metoda Laplacea), wrzucę ci część kodu:

Kod
E = ((2, 3, 4, 9, 7, 8, 9, 3),
    (1, 2, 0, -1, 0, 3, 2, 1),
    (4, 4, 0, 4, 5, 6, 7, 2),
    (0, 4, 2, 4, 5, 3, 0, 6),
    (4, 3, 1, 4, -3, 3, 9, 5),
    (0, 6, 4, 4, -3, 8, 3, 7),
    (0, 5, 0, 4, -3, 4, 5, 8),
    (0, 4, 0, -2, 6, 4, 0, -3))
 
F = ((2, 3, 6, 8, 2, -5, 7, 0, 9, 2, 3, 4, 5),
    (0, 6, 5, 6, 1, 4, 4, 6, 4, -5, 0, 5, 2),
    (5, -5, 0, 7, 1, 0, 4, -3, 1, 0, 0, 7, 4),
    (0, 4, 0, 6, 4, 2, 4, 5, 2, 5, 3, 0, 6),
    (3, 7, 0, 4, 3, 1, 4, -3, 0, 5, 3, 9, 5),
    (0, 6, 5, 4, 5, 4, 4, -7, 8, 5, 0, 3, 7),
    (1, 5, 0, 8, 3, 5, 4, -3, 4, 5, 3, 4, 8),
    (0, 3, 7, 4, 0, 2, 4, 6, 4, 0, -3, 5, 6),
    (3, 4, 0, 5, 3, 2, 4, -3, 4, 5, 3, 4, 2),
    (0, 6, 8, 4, 6, 3, 4, -1, 4, 5, 3, 1, 2),
    (7, 5, 0, 8, 3, 2, 0, -4, 0, 5, 0, 5, 2),
    (0, 6, 5, 4, 5, 2, 4, 3, 4, 5, 2, 1, 2),
    (8, 6, 9, 3, 3, 4, 4, -3, 4, 5, 2, 5, 2))
 
import random
 
def random_tab(n : int):
  return [[random.randint(-9,9) for x in range(n)] for y in range(n)]
 
 

Powyżej masz dwie macierze E i F do zabawy / testów oraz funkcję random_tab(), która wypluwa macierz nxn z losowymi liczbami całkowitymi (z zakresu -9 do 9). Może się przyda.

Kompletnie nie rozumiem u Ciebie co chciałeś uzyskać tu:

Kod
t[ n * i + j ] = int(raw_input("A[%i,%i] = " % (i + 1, j + 1) ) )

Macierz jest 2D, a ty zapisujesz dane do jednowymiarowej tablicy.
int(n) jest zbędne w pętli "for j".

Jak masz problemy z indeksowaniem to sobie narysuj macierz na kartce papieru.


Zapisane
« Odpowiedz #3 : 17:24 14/07/18 »
hurgadion Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 8


Hej,
odpal taki kod (wersja 3):
Kod:
n = int(input("Podaj wymiar macierzy: "))
x = [[0 for i in range(n)] for j in range(n)]
for i in range(n):
    for j in range(i+1, n):
        s = int(input("Podaj element (" + str(i) + "," + str(j) + "): "))
        x[i][j] = s
        x[j][i] = s

print("Wczytana macierz:")
for i in range(n):
    print(" ".join(map(str, x[i])))
Pozdrawiam...  Uśmiech
Zapisane
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2019 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot