Diskuze: pole2D


To čo si si nainicializoval nie je 2D pole ale pole o 2 prvkoch, to čo robí tvoj kód je, že sa snažíš 2x za sebou zmeniť hodnotu na pozícii poleA[3][3] = 1, nie som si istý, či práve to chceš. každopádne
pole = [[0 for x in range (5)] for y in range(5)]
toto ti vytvorí pole 5x5 kde je na každom mieste 0.
Jaroslav Trojan:24.5.2017 16:36
Velké díky xpoproci !
Mým cílem je dosadit do každého prvku pole danou vypočtenou hodnotu, dle
vzoru:
poleA(i,j)= hodnota v cyklu i a j . Nevím, jak to provedu.
Ale moc děkuji.
Jaroslav Trojan:29.5.2017 10:10
Ahoj, nevím proč zrovna v tomto případu je chyba u return. Kód je
přiložen a nejsem si jistý správností
maticových operací , viz další. Byl bych velmi rád , kdybys mi poradil.
Díky.
Michal Haňáček:29.5.2017 10:48
Ahoj, podle screenu to vypadá, že fce. posunuti nemá ukončenou závorku v příkazu print (poslední řádek).
Jaroslav Trojan:29.5.2017 14:20
Ahoj, používám poprvé dvojrozměrná pole (matice), takže mám
problémy. V příloze je část kódu, která
mi není zcela jasná. Mohl bys se na to podívat jako zkušený programátor,
kde je chyba.
Jaroslav Trojan:29.5.2017 14:28
Ahoj, zde je ta příloha s chybou. Děkuji za radu.
gcx11:29.5.2017 21:11
Na tom řádku před chybou chybí koncová závorka.
SyntaxError = chyba v syntaxi, tj. ten kód není validní, protože někde chybí závorka, operátor, proměnná...
gcx11:30.5.2017 15:25
Tipoval bych, že tam mají být hranaté závorky místo kulatých.
Ahoj, dostal jsem se do situace , kdy si nevím rady. Nevím jak si mám vysvětlit chybu - viz příloha:
A mám ještě problém se zápisem text. dat. Příkaz k zápisu jsem získal z knihy prof. Summerfielda "PYTHON 3".
Michal Haňáček:1.6.2017 10:46
Ahoj Jaroslave, vy jste generátor problémů . Vždyť tam přímo máte
napsané kde je problém - odkazujete se na proměnou sezx dříve než jí
naplníte (konkrétně metoda gener_souradnic).
Michal Haňáček:1.6.2017 10:48
Z toho screenu se nedá nic vyčíst vyjma toho, že se pokoušíte zapsat do čehosi pod názvem "fh" ... ono celkově tyhle screeny to je velká paráda na hledání Vašich chyb ...
gcx11:1.6.2017 14:14
Ten soubor bude otevřený jenom pro čtení, proto se do něj nedá zapisovat. Musí se použít parametr "w" jako write (zapisovat).
f = open('muj_sobor.txt', 'w','utf-8');
Jaroslav Trojan:1.6.2017 17:32
Díky gcx11, mám otevření file na začátku programu. Mám však jiný problém s indexy seznamu sezx[ ] a sezy[ ]. Definoval jsem oba seznamy jako sezx[1: 6] a hlásí to chybu index out of range, jak je to možné? viz přílohy
gcx11:1.6.2017 17:57
Protože
seznam[i:j]
znamená, vrať mi část seznamu, která začíná na i-tém prvku a končí před j-tým prkvem.
Příklad:
seznam = ['a', 'b', 'c', 'd', 'e']
print(seznam[1:3]) # vytiskne ['b', 'c']
gcx11:1.6.2017 18:00
Pokud chceš do seznamu postupně přidávat prvky, tak stačí volat metodu append
seznam.append(prvek)
Seznam je kolekce prvků, která se automaticky zvětšuje podle toho, jak do ní přidáváš prvky. Není třeba specifikovat počet prvků, které bude obsahovat, což bylo to, o co ses podle mě pokoušel.
Jaroslav Trojan:2.6.2017 8:08
Ahoj gcx11, seznamy : sezx[ ] a sezy[ ] mám sestavené ve funkci def
gener_souradnic. To ale znamená , že neexistuje indexovaná proměnná, např.
sezx[ i ] ?
Nutně potřebuji pracovat s poli, kde volám jednotlivé prvky pole dle indexu,
ale jak vidím tak to nejde( např. pole K[ 5,5] volat prvek K[i , j] ). A dále
nevím jak dostat seznam (pole) do hlav.programu, když ho mám ve funkci ( def
něco:).
Díky za radu.
xpoproci:2.6.2017 11:10
k[5, 5] Ti asi nepôjde, dvojrozmerné pole sa volá K[5][5] a ak chceš s poľom pracovať tak si ho nainicializuj na začiatku programu, keďže pole je ak sa nemýlim referenčný datový typ tak ho posúvaj ako argument daných funkcií a pracuj rovno s ním, alebo výsledné polia v jednotlivých funkciách vracaj a ukladaj si ich do premenných v hlavnom programe.
Jaroslav Trojan:2.6.2017 11:47
Vůbec ti nerozumím co tím myslíš. Jde pracovat s indexovanou proměnnou
X(i) nebo třeba K( i, j) nebo nejde?
A když nejde jak to nahradím, já to nevím, nikde jsem se to nedozvěděl,
ani nevím kde to hledat.
Erik Šťastný:2.6.2017 13:14
Celé tohle vlákno mi přijde zbytečné, máš program, který je daleko nad tvé znalosti a snažíš se v něm hrabat, když neumíš úplné základy. Být tebou tak otevřu kapitolu Python I. ve zdejším tutoriálu a jdu po stupně.
Všechny tutoriály Pythonu jsem pročetl a vyzkoušel příklady. Takové
informace, které by řešily maticové operace , tj, zpracování 2rozměrných
polí , myslím třeba násobení dvou matic , to tam není určitě. Raději
pošlu celý program, aby to bylo jasné. Vytvořil jsem ho v GWBASIC , a tam
je
to velmi jednoduché. Je třeba možné jednotlivý prvek pole sčítat nebo
násobit prvkem jiného pole velmi snadno. V Pythonu (tutoriálech) nic
takového není uvedeno.
#!usr/bin/ekv Python3
# PRUT 2
import math
"""PRUT2-ROVINNA PRIHRADOVA KONSTRUKCE"""
def gener_cislovani():
d1=0
zat="zat"
if N1>0 or N2>0:
print("gener. číslování prutů :N1>0 nebo N2>0 čtení")
fh=None
fh=open(zat,encoding="utf8")
# open"i",1,"zat"
elif N1==0 and N2==0:
print("gener. číslování prutů :N1=N2=0 zápis")
fh=None
fh=open(zat,"w",encoding="utf8")
# open"o",1,"zat"
soucK=0
for i in range(1,pocetP+1):
if N1==0 or N2==0:
pass
if i ==1:
print(" Dolní pas: 2-4 ")
cisloN=(pocetstycI1-3)/2
dolpas=cisloN
elif i==dolpas+1:
print(" Horní pas: 1-3 ")
cisloN=dolpas+1
elif i== pocetstycI1-2:
print(" Diagonály: 1-2 ")
cisloN=pocetstycI1-1
zacP1= int(input(" čísloP1 začátku prutu? "))
konP2= int(input(" čísloP2 konce prutu? "))
plochaF= float(input(" průřezová plocha[cm^2] ? "))
soucK+=1
print(" K=",soucK,"cisloN=",cisloN)
cisloN=int(cisloN)
sezP1=[]
sezP2=[]
sezF=[]
sezP1a=[]
sezP2a=[]
sezFa=[]
for j in range(1,cisloN+1):
print(" prut I",i,"cisloN=",cisloN)
if j==1:
sezP1.append(zacP1)
sezP2.append(konP2)
sezF.append(plochaF)
zacP1=str(zacP1)
konP2=str(konP2)
plochaF=str(plochaF)
fh.write(zacP1)
fh.write(konP2)
fh.write(plochaF)
#print#1,P1,P2,F
zacP1=zacP1
konP2=konP2
print(zacP1,konP2,plochaF)
elif soucK < 3 and soucK >1:
zacP1= konP2
konP2= konP2+2
sezP1.append(zacP1)
sezP2.append(konP2)
sezF.append(plochaF)
print(zacP1,konP2,plochaF)
zacP1=str(zacP1)
konP2=str(konP2)
fh.write(zacP1)
fh.write(konP2)
fh.write(plochaF)
elif soucK==3:
zacP1= konP2
konP2= konP2+1
sezP1.append(zacP1)
sezP2.append(konP2)
sezF.append(plochaF)
zacP1=str(zacP1)
konP2=str(konP2)
fh.write(zacP1)
fh.write(konP2)
fh.write(plochaF)
else:
pass
zacP1=int(zacP1)
konP2=int(konP2)
if abs(konP2-zacP1)>d1:
d1=abs(konP2-zacP1)
print(" Prut I:",i,"d1=",d1)
sezP1a.append(zacP1)
sezP2a.append(konP2)
sezFa.append(plochaF)
print("zacP1,konP2,plochaF[cm^2]:",zacP1,konP2,plochaF)
zacP1=str(zacP1)
konP2=str(konP2)
fh.write(zacP1)
fh.write(konP2)
fh.write(plochaF)
# print#1,P1,P2,F
zacP1=int(zacP1)
konP2=int(konP2)
if N1>0 or N2>0:
if abs(konP2-zacP1)>d1:
d1=abs(konP2-zacP1)
print()
if soucK==3:
break
elif i>=pocetP:
break
print("d1=",d1)
d1=(d1+1)*2
print(" polopas D1=",d1)
for m in range(1,2*(pocetstycI1+1)):
for j in range(1,d1+1+1):
matK=[[0 for i in range(1,(2*pocetstycI1)+2)] for j in range(1,(d1+1)+1)]
print("sezP1:",sezP1, "sezP2:",sezP2,"sezF:",sezF)
print("sezP1a:",sezP1a,"sezP2a:",sezP2a,"sezFa:",sezFa)
return d1,sezP1,sezP2,sezF,sezP1a,sezP2a,sezFa
def gener_souradnic():
nosnavyska= float(input(" Nosná výška H[m]? "))
delkadilu = float(input(" délka dílu nosníku? "))
(HH)=nosnavyska
(KK)=delkadilu
LS=0
sezx=[]
sezy=[]
print(" Nosná výška H[m]=",HH,"délka dílu nosníku[m]=",KK)
print(" počet dílů=",pocetstycI1-1)
print(" Souřadnice styčníků x[m] y[m]")
sezx.append(0)
#sezx[1]=0
#sezy[1]=HH
sezy.append(HH)
print(" ", 1," ",0," ",HH)
for i in range(2,pocetstycI1+1):
sezx.append((i-1)*KK)
#sezx[i]=(i-1)*KK
if LS==0:
sezy.append(0)
y=0
#sezy[i]=0
LS= 1
else:
sezy.append(HH)
y=HH
#sezy[i]=HH
LS=0
print(" ", i," ",(i-1)*KK," ",y )
rozpeti = KK*(i-1)
print(" Rozpětí nosníku=",rozpeti)
print("sezx:",sezx)
print("sezy:",sezy)
return sezx,sezy
def prut():
sezP1=sezP1[1: pocetstycI1+1]
sezP2=sezP2[1: pocetstycI1+1]
fh=None
fh=open(zat,"w",encoding="utf8")
# open"o",2,"zat"
for i in range(1,pocetP+1):
zacP1= int(input(" začátek prutu i...? "))
konP2= int(input(" konec prutu j...? "))
plochaF= float(input(" průřezová plocha [cm^2] ? "))
fh.write("[{0.prvek_id}]\n"
"prvek={0.zacP1,konP2,plochaF}\n"
".NARATIVE_END.")
# print#2,P1,P2,F
sezP1[i]= zacP1
sezP2[i]= konP2
sezF[i]= plochaF
if abs(konP2-zacP1)>d1:
d1 = abs(konP2-zacP1)
d1=(d1+1)*2
for i in range(1,(pocetstycI1+1)*2):
for j in range(1,d1+1+1):
matK = [[0 for i in range(1,pocetstyc*2+2)] for j in range(1,d1+1+1)]
return sezP1,sezP2,sezF
def delka():
sezx=sezx[1: pocetstycI1+1]
sezy=sezy[1: pocetstycI1+1]
delkaD= math.sqrt((sezx[konP2]-sezx[zacP1])^2 + (sezy[konP2]-sezy[zacP1])^2)
A1 = (sezx[konP2] - sezx[zacP1])/delkaD
A2 = (sezy[konP2] - sezy[zacP1])/delkaD
plochaF=plochaF/10000
return plochaF,delkaD,A1,A2
def posunuti():
print(" Posunutí styčníků:")
print(" Styčník: x[mm] y[mm] ")
for i in range(1,pocetstycI1+1):
for j in range(d1+1+1):
print(" ", i," ", matK[(i-1)*2 + 1, d1+1]*1000," ", matK[(i-1)*2 + 2,d1+1]*1000)
return
def vazba():
vazbaU=[[0 for i in range(1,pocetI3+1)] for j in range(1,4)]
vazbaU=[]
for i in range(1,pocetI3+1):
vazbaU.append([])
for j in range(1,3+1):
vazbaU[i].append(0)
return vazbaU
def maticeA():
sourx=sourx[1: pocetstycI1+1]
soury=soury[1: pocetstycI1+1]
plochaF=plochaF/10000
delkaD=math.sqrt((sourx[konP2]-sourx[zacP1])^2 + (soury[konP2]-soury[zacP1])^2)
A1 = (sourx[konP2]-sourx[zacP1])/delkaD
A2 = (soury[konP2]-soury[zacP1])/delkaD
matA = [[0 for i in range(1,5)] for j in range(1,5)]
matA[1,1]= A1^2
matA[1,2]=A1*A2
matA[1,3]=-(A1^2)
matA[1,4]=-A1*A2
matA[2,1]=A1*A2
matA[2,2]=A2^2
matA[2,3]=-A1*A2
matA[2,4]=-(A2^2)
matA[3,1]=matA[1,3]
matA[3,2]=-A1*A2
matA[3,3]=A1^2
matA[3,4]=A1*A2
matA[4,1]=-A1*A2
matA[4,2]=-(A2^2)
matA[4,3]=A1*A2
matA[4,4]=A2^2
for i in range(1,5):
for j in range(1,5):
matA[i,j]=modulE*plochaF/delkaD*matA[i,j]
for j in range(1,3):
for j1 in range(1,3):
z1=(zacP1-1)*2+j
y2=(zacP1-1)*2+j1
if y2>=z1:
y2=y2-z1+1
matK[z1,y2]= matK[z1,y2]+matA[j,j1]
else:
z1=(konP2-1)*2+j
y2=(konP2-1)*2+j1
if y2>=z1:
y2=y2-z1+1
matK[z1,y2]=matK[z1,y2]+matA[j+2,j1+2]
else:
z1=(zacP1-1)*2+j
y2=(konP2-1)*2+j1
if y2>=z1:
y2=y2-z1+1
matK[z1,y2]=matK[z1,y2]+matA[j,j1+2]
else:
z1=(konP2-1)*2+j
y2=(zacP1-1)*2+j1
if y2>=z1:
y2=y2-z1+1
matK[z1,y2]=matK[z1,y2]+matA[j+2,j1]
return matA
def vyslednice():
print(" VYSLEDNICE SIL VE STYCNIKU")
print(" Styčník: Rx[kN] Ry[kN] ")
for j in range(1,pocetstycI1+1):
silaR1=0
silaR2=0
silaR3=0
for i in range(1,pocetP+1):
if i <= (2*pocetstycI1):
L=0
H=0
else:
L=2*pocetstycI1
H=5
if j == matK[i-L,H+1] or j== matK[i-L,H+2]:
break
elif sezx[matK[i-L,H+1]] <= sezx[j] or sezx[matK[i-L,H+2]]<=sezx[j]:
silaR1=silaR1-matK[i-L,H+5]*matK[i-L,H+3]
else:
silaR1=silaR1+matK[i-L,H+5]*matK[i-L,H+3]
if sezy[matK[i-L,H+1]]<= sezy[j] or sezy[matK[i-L,H+2]]<= sezy[j]:
silaR2=silaR2-matK[i-L,H+5]*matK[i-L,H+4]
break
silaR2=silaR2+matK[i-L,H+5]*matK[i-L,H+4]
silaR3=silaR3+matK[i-L,H+6]*matK[i-L,H+5]
print(" ",j," ", silaR1," ",silaR2 )
return
def osove_sily():
fh=None
fh=open(zat,encoding="utf8")
# open"i",1,"zat"
for i in range(1,pocetP+1):
#input#1,P1 ,P2 ,F
if i <= 2*pocetstycI1:
L=0
H=0
else:
L=2*pocetstycI1
H=5
matK[i-L,H+1]= zacP1
matK[i-L,H+2]= konP2
delka()
matK[i-L,H+3] = math.fabs(A1)
matK[i-L,H+4] = math.fabs(A2)
silaP0 = (matK[(konP2-1)*2+1,d1+1]-matK[(zacP1-1)*2+1,d1+1])*A1
silaP0+=(matK[(konP2-1)*2+2,d1+1]-matK[(zacP1-1)*2+2,d1+1])*A2
silaP0=silaP0 *(modulE*plochaF/delkaD)
print(" ",i," ",zacP1," ",konP2," ",delkaD," ",plochaF*10000," ",silaP0)
matK[i-L,H+5]= silaP0
return
def gauss():
Q=2*pocetstycI1
for i in range(1,Q+1):
if matK[i,1]==0:
matK[i,1]=1
for i in range(1,pocetI3+1):
for j in range(2,3+1):
if vazbaU[i,j]==0:
break
else:
H=2*vazbaU[i,1]+j-3
for k in range(2,d1+1):
matK[H,k]=0
if k<=H:
matK[H+1-k,k]=0
matK[H,1]=1
matK[H,d1+1]=0
for i in range(1,Q+1):
matK[i,1]= 1/matK[i,1]
f1=d1+1-(d1-1-Q+i)*(Q-i<d1-1)*-1
for j in range(2,f1):
a=matK[i,1]*matK[i,j]
g=f1-j
h=i+j-1
for k in range(1,g+1):
matK[h,k]=matK[h,k]-a*matK[i,j+k-1]
matK[h,d1+1]=matK[h,d1+1]-a*matK[i,d1+1]
matK[i,j] = a
matK[i,d1+1]=matK[i,d1+1]*matK[i,1]
for i in range(Q-1,1+1,-1): #zpětný krok
f1=d1-(d1-1-Q+i)*(Q-i<=d1-1)*-1
for j in range(2,f1+1):
matK[i,d1+1]=matK[i,d1+1]-matK[i+j-1,d1+1]*matK[i,j]
matK=[[ 0 for i in range(1,pocetstycI1*2+1)] for j in range(1,d1+1+1)]
return
#hlavní program main() module
modulE=float(input(" modul pružnosti E[kPa] "))
pocetstycI1=int(input( " počet styčníků "))
prihrnosnik = int(input( " Příhradový nosník ano=1 ne= 0 "))
P9=1
N2=0
sour="sour"
zat="zat"
pocetP= 2*pocetstycI1-3
if prihrnosnik == 1:
print( " Příhradový nosník ")
N1=0
else:
N1=1
if N1== 0:
print()
fh=None
fh=open(sour,"w",encoding="utf8")
# open"o",3,"sour"
else: #N1=1
print()
fh=None
fh=open(sour,encoding="utf8")
# open"i",3,"sour"
souradnice = int(input(" Automat. generování souřadnic? ano=1, ne=0 "))
if souradnice==1:
sezx=[]
sezy=[]
sezx=sezx[1:pocetstycI1+1]
sezy=sezy[1:pocetstycI1+1]
gener_souradnic()
else:
pass
if souradnice==0:
for i in range(1,pocetstycI1+1):
if N2==0:
sezx=[]
sezy=[]
print(" Souřadnice styčníku: ",i)
sezx = float(input(" X[m] ? "))
sezy = float(input(" Y[m] ? "))
print("x[m]=",sezx,"y[m]=",sezy)
fh.write( sezx)
fh.write( sezy)
# print#3,sezx(i),sezy(i)
else:
print()
fh.readline(sezx)
fh.readline(sezy)
# input#3,x,y čtení z disku
print(" VYPOCET PRIHRADOVE ROVINNE KONSTRUKCE")
print(" Modul pružnosti E[MPa]=",modulE/1000)
print(" Počet styčníků = ",pocetstycI1, " Počet prutů P =",pocetP)
if prihrnosnik== 1:
print(" P ř í h r a d o v ý n o s n í k")
print(" Styčník: x[m] y[m]")
#sezx=gener_souradnic(sezx)
#sezy=gener_souradnic(sezy)
print(sezx)
print(sezy)
for i in range(1,pocetstycI1+1):
pass
# print (" ", i," ", sezx[i]," ", sezy[i])
if prihrnosnik==1:
gener_cislovani()
fh=None
fh=open(zat,encoding="utf8")
#open"i",2,"zat" čtení dat
if prihrnosnik== 0:
prut()
if N1==0 or N2==0:
print(" Prut číslo: i .......... j průřez A[cm^2]")
fh=None
fh=open(zat,encoding="utf8")
#open"i",2,"zat" čtení dat
sezP1=[]
sezP2=[]
sezF=[]
sezP1=sezP1[1: pocetP+1]
sezP2=sezP2[1: pocetP+1]
sezF= sezF[1: pocetP+1]
for k in range(1,pocetP+1):
zacP1=str(zacP1)
konP2=str(konP2)
plochaF= float(plochaF)
fh.readline(zacP1)
fh.readline(konP2)
fh,readline(plochaF)
#input#2,P1,P2,F čtení dat
#sezP1[k]=zacP1
#sezP2[k]=konP2
#sezF[k]= plochaF
if P9==0:
print(" ", k," ", zacP1," ", konP2," ", plochaF)
delkaD=math.sqrt((sezx[konP2]-sezx[zacP1])^2+(sezy[konP2]-sezy[zacP1])^2)
A1=(sezx[konP2]-sezx[zacP1])/delkaD
A2=(sezy[konP2]-sezy[zacP1])/delkaD
plochaF=sezF[k]/10000
maticeK(delkaD,A1,A2,plochaF)
if N1==0:
pass
print()
elif P9==1:
pass
print()
pocetI3 = int(input(" Počet uložených styčníků ? "))
vazba()
print(" Počet uložených styčníků=",pocetI3)
print(" Styčník: posun X: posun Y: ")
for i in range(1,pocetI3+1):
stycnik= int(input(" Styčník číslo? "))
vazbaU[i,1]= stycnik
posunx= int(input(" posun X[pevný=1,posuvný=0]? "))
posuny= int(input(" posun Y[pevný=1,posuvný=0]? "))
vazbaU[i,2]=posunx
vazbaU[i,3]=posuny
print(" ", i," ", posunx," ", posuny)
pocetI4= int(input(" Počet zatížených styčníků ? "))
print(" Zatěžovací stav číslo:",P9)
for i in range(1,(pocetstycI1+1)*2):
matK=[[0 for i in range(1,pocetstycI1*2+2)] for j in range(1,d1+1+1)]
#matK(i,d1+1)=0
print(" Počet zatížených styčníků = ",pocetI4)
print(" Styčník číslo: Px[kN] Py[kN]")
#sezcx=list(range(1,pocetI4+1))
#sezPx=list(range(1,pocetI4+1))
#sezPy=list(range(1,pocetI4+1))
for i in range(1,pocetI4+1):
stycC1 = int(input(" číslo styčníku ? "))
silaxC2 = float(input(" osamělá síla Px[kN] ? "))
silayC3 = float(input(" osamělá síla Py[kN] ? "))
sezcx[i] = stycC1
sezPx[i] = silaxC2
sezPy[i] = silayC3
matK[(stycC1-1)*2+1,d1+1]= silaxC2
matK[(stycC1-1)*2+2,d1+1]= silayC3
print(" ",stycC1," ",silaxC2," ",silayC3)
gauss()
print(" V Y S L E D K Y V Y P O C T U: ")
print(" PRUT i........j délka L[m] průřez A[cm^2] Osová síla [kN]")
osove_sily()
posunuti()
vyslednice()
print(" Uložení konstrukce:")
print(" Styčník: U(x)=1 U(y)=1")
for i in range(1,pocetI3+1):
print(" ",vazbaU[i,1])
if vazbaU[i,2]==1:
print(" *")
elif vazbaU[i,3]==1:
print(" *")
P9=P9+1
print(" K O N E C ")
gcx11:2.6.2017 14:19
Proměnnou, kterou můžeš používat všude si musíš definovat na začátku programu jako global
global nejaka_promenna
Na dvourozměrou matici složenou z pole polí se přistupuje takto:
matice[i][j]
samozřejmě na těch indexech musí něco být, jinak to vyhodí výjimku.
Na práci s maticemi máš dvě možnosti:
- Napsat si to sám (jednou jsem musel takto počítat lineární a kvadratickou regresi)
- Použít knihovnu numpy, kde už to je naprogramované
import numpy as np
A = np.zeros((3, 3), dtype=int)
A[0, 0] = 1
A[1, 1] = 1
A[2, 2] = 1
A.dot(A) # zase jednotková matice po vynásobení
https://docs.scipy.org/…ckstart.html
A pokud budeš něco z toho používat, tak doporučuji si to vyzkoušet někde vedle, ať víš, jak to funguje.
Ahoj,
nemohu přijít na to, proč se nevytvoří celé seznamy sezx, sezy ze všech 5
souřadnic, ale jen
poslední dvojice 4 , 1. Příkazy sezx.append(sex) a sezy.append(sey) běží v
cyklu od 1 do 5.
A ještě se to nezapíše do souboru: sour
Není mi to jasné , blíže v příloze.
Mám seznamy : sezP1,sezP2 naplněné ve funkci prut() , jsou to proměnné
global, ale do hlavního programu se seznamy nepřenesly. Tam jsou plné nul. Je
to možné?
A ještě něco: načítám prvky seznamu příkazem fh.read(prvek) a nic se
nenačte.
gcx11:4.6.2017 13:20
Omlouvám se, co jsem to teď zkoušel, tak global se musí použít na začátku těch funkcí, kde se do nich něco přiřazuje, aby to nebralo jako novou lokální proměnnou.
#!/usr/bin/env python3
def modify_list():
global my_list
my_list = []
for i in range(10):
my_list.append(i)
def print_list():
for item in my_list:
print(item)
modify_list()
print_list()
A k tomu fh.read(prvek), po řádka se čte takto:
prvek = fh.readline()
A úplně nejlepší varianta je takto:
with open("file.txt", "r", "utf-8") as fh:
for line in fh:
prvek = line.strip('\n')
# zde se udělá něco s prvkem
Jaroslav Trojan:4.6.2017 14:46
Promiň, asi jsi přehlédl můj dotaz o jeden výše, kde je příloha.
Problém je v tom, že se nevytvoří celý seznam, ale jen jeho poslední
prvek.
Nemohu zjistit v čem to vězí.
Díky za tvoje rady.
gcx11:4.6.2017 14:58
Protože si ho pokaždé v tom cyklu nastavíš na prázdný, takže tam zbyde akorát prvek z poslední iterace.
Řešení je dát to
sezx = []
sezy = []
před ten cyklus.
Jaroslav Trojan:4.6.2017 15:06
Ahoj, no tak to jsem tedy přehlédl, promiň prosím.
Velice děkuji.
Chci zapisovat data po řádcích prostřednictvím writeline . Jakého typu
musí být zapisovaný objekt. Použil jsem typ int a vyhodilo to chybu:
objekt nemá atribut writeline.
gcx11:4.6.2017 16:02
Protože zapsání řádku je to samé jako zapsat něco + newline. Samozřejmě musí být soubor otevřen správně pro čtení.
with open("file.txt", "r", "utf-8") as f:
f.write('Text radku' + '\n')
Sestavuji matici matA(4x4) a z té potom větší matici matK(10x7) jak je
vidět z kódu. Proč mi Python vyhodí chybu, že jsou indexy mimo rozsah,
když je na příloze vidět, že indexy obou polí(matic) jsou uvnitř : u matA
indexy 2,3,4 a u matK indexy řádků 7,8, a indexy sloupců 2,3,4. Stane se to
až při poslední iteraci a to až posledního pátého prvku , označeného
čísly uzlu zacP1=4 a konP2=5, viz příloha. Tak to mi není jasné proč.
Všechny předchozí cykly proběhly jak měly v pořádku.
Díky!
gcx11:7.6.2017 14:00
Podle mě v tom máš chyby minimálně z toho, že indexuješ ty matice od jedné a ne od nuly.
import numpy as np
A = np.zeros((3, 3), dtype=int) # matice 3x3
for i in range(3): #řádek
for j in range(3): #sloupec
A[i][j] = 3*i+j
print(A)
# vypíše
array([[0, 1, 2],
[3, 4, 5]
[6, 7, 8]])
Jaroslav Trojan:7.6.2017 15:07
Zkoušel jsem import numpy,ale ohlásil chybu, že nezná jméno numpy
gcx11:7.6.2017 18:21
Protože je to knihovna, která se musí doinstalovat. Otevřeš příkazový řádek (cmd.exe) a tam zadáš:
pip install numpy
Pokud máš dobře nainstalovaný Python (tj. můžeš z příkazové řádky použít příkaz pip), tak by se měla knihovna sama doinstalovat.
Jaroslav Trojan:10.6.2017 8:52
Ačkoliv mám indexy matice matK od nuly, stejně došlo k přetečení
indexu mimo rozsah. Neumím si to vysvětlit , protože rozměry matice K jsou
dostatečné ----- 10+1 řádek, 7+1 sloupců, matice je definována jako 11x8
.
Děkuji .
ostatně je to vidět v příloze
gcx11:10.6.2017 14:56
A máš jistotu, že ty proměnné použité v range jsou menší nebo rovny daným rozměrům?
Zobrazeno 50 zpráv z 70.