Forum » Programiranje » python problem
python problem
Isotropic ::
imam takole
vrne mi tole za x,y,z koordinate
in elemente
zdaj rad bi spravil zgornji del (x,y,z) v svoj list [x, y, z], spodnji dela pa v svojega [number, connectivity (n vnosov)] -- to naj bi bila oba 2d lista; zraven x,y,z naj bi bil se en int.
kako naj to naredim? python znam zelo slabo. vem, da je treba narediti v loopu, a zal ne znam prave iteracije postimat.
se tole, ce bo kaj koristilo
tisti int, o katerem sem govoril za v x,y,z list, je tisti label.
for name, instance in assembly.instances.items(): n = len(instance.nodes) print 'Number of nodes of instance %s: %d' % (name, n) numNodes = numNodes + n # For each node of each part instance # print the node label and the nodal coordinates. # Three-dimensional parts include X-, Y-, and Z-coordinates. # Two-dimensional parts include X- and Y-coordinates. if instance.embeddedSpace == THREE_D: print ' X Y Z' for node in instance.nodes: print node.coordinates # - tole ni vazno vec else: # print ' X Y' # for node in instance.nodes: # print node.coordinates # For each element of each part instance # print the element label, the element type, the # number of nodes, and the element connectivity. n = len(instance.elements) print 'Number of elements of instance ', name, ': ', n numElements = numElements + n print 'ELEMENT CONNECTIVITY' print ' Number Type Connectivity' for element in instance.elements: print '%5d %8s' % (element.label, element.type), for nodeNum in element.connectivity: print '%4d' % nodeNum, print
vrne mi tole za x,y,z koordinate
NODAL COORDINATES X Y [ 0. 300. 0.] [ 0. 278.91864014 0. ] [ 0. 255.49488831 0. ] [ 0. 229.4684906 0. ] [ 0. 200.55029297 0. ] [ 0. 168.41896057 0. ]
in elemente
ELEMENT CONNECTIVITY Number Type Connectivity 1 CAX4 3 43 41 1 2 CAX4 5 45 43 3 3 CAX4 7 47 45 5 4 CAX4 9 49 47 7 5 CAX4 11 51 49 9 6 CAX4 13 53 51 11 7 CAX4 15 55 53 13
zdaj rad bi spravil zgornji del (x,y,z) v svoj list [x, y, z], spodnji dela pa v svojega [number, connectivity (n vnosov)] -- to naj bi bila oba 2d lista; zraven x,y,z naj bi bil se en int.
kako naj to naredim? python znam zelo slabo. vem, da je treba narediti v loopu, a zal ne znam prave iteracije postimat.
se tole, ce bo kaj koristilo
>>> print asm.instances['PART-1-1'].nodes[2] ({'coordinates': array([0.0, 255.494888305664, 0.0], 'd'), 'label': 5})
tisti int, o katerem sem govoril za v x,y,z list, je tisti label.
- spremenil: Isotropic ()
jype ::
Malo bolje opiši, kako bi rad te elemente združil.
Če prav razumem, bi rad imel list listov [[x1, y1, z1], [x2, y2, z2], ... ]
Sem prav razumel?
Če prav razumem, bi rad imel list listov [[x1, y1, z1], [x2, y2, z2], ... ]
Sem prav razumel?
Isotropic ::
ja, tocno tako.
pa ce lahko se poves, kako tisti label vrzem not, bi bilo tudi fajn.
sam label lahko v promptu sprintam takole (glej zadnjo kodo v prejsnjem postu)
posamezne koordinate pa
>>> print asm.instances['PART-1-1'].nodes[2].coordinates[0] < -- (0,1, 2)
pa dobim x koord.
po istem principu pa elemente (namesto nodes)
elements[2].label
elements[2].connectivity[0]
dobim 5
(conn. gre od 0 do n, vrze tudi posameznega ven)
pa ce lahko se poves, kako tisti label vrzem not, bi bilo tudi fajn.
sam label lahko v promptu sprintam takole (glej zadnjo kodo v prejsnjem postu)
>>> print asm.instances['PART-1-1'].nodes[2].label 5
posamezne koordinate pa
>>> print asm.instances['PART-1-1'].nodes[2].coordinates[0] < -- (0,1, 2)
pa dobim x koord.
po istem principu pa elemente (namesto nodes)
elements[2].label
elements[2].connectivity[0]
dobim 5
(conn. gre od 0 do n, vrze tudi posameznega ven)
Zgodovina sprememb…
- spremenil: Isotropic ()
jype ::
Tkole.
[[node.label] + [coord for coord in node.coordinates] for node in asm.instances['PART-1-1'].nodes]
Prvi element je node.label, "prišteješ" mu še vse koordinate tega node-a in dobiš posamezen list, potem pa to ponoviš za vsak node v asm.instances['PART-1-1'].nodes in dobiš 2d polje oz. list listov.
[[node.label] + [coord for coord in node.coordinates] for node in asm.instances['PART-1-1'].nodes]
Prvi element je node.label, "prišteješ" mu še vse koordinate tega node-a in dobiš posamezen list, potem pa to ponoviš za vsak node v asm.instances['PART-1-1'].nodes in dobiš 2d polje oz. list listov.
Zgodovina sprememb…
- spremenilo: jype ()
Isotropic ::
[[element.label] + [conn for conn in element.connectivity] for element in asm.instances['PART-1-1'].elements]
tkole je potem za element?
morem na zacetku se reci list = []
ali samo list = [[node.label...?
tkole je potem za element?
morem na zacetku se reci list = []
ali samo list = [[node.label...?
Zgodovina sprememb…
- spremenil: Isotropic ()
jype ::
loki3000> ali samo list = [[node.label...?
Tako, ja. To je list comprehension, v tutorialu piše, kako delujejo, sicer se pa berejo kot matematični izrazi: "(node.label in koordinata za vsako od koordinat v node) za vsak node v nodih od instance"
Tako, ja. To je list comprehension, v tutorialu piše, kako delujejo, sicer se pa berejo kot matematični izrazi: "(node.label in koordinata za vsako od koordinat v node) za vsak node v nodih od instance"
Isotropic ::
lahko priporocis kaksno v redu knjigo z veliko primeri po moznosti? pa da je orientirana bolj proti takim zadevam - computational, ne kaksen iternet ipd.?
sem pa beginner cisti pri programiranju, nekaj imam samo znanja fortrana, pa se to je bilo toliko let nazaj, da ne napisem nic vec.
sem pa beginner cisti pri programiranju, nekaj imam samo znanja fortrana, pa se to je bilo toliko let nazaj, da ne napisem nic vec.
jype ::
Learning Python, tazadnji edition. Vse živo je not, za computational stuff pa pridi sem vprašat, mam občutek, da je na tem forumu precej ljudi, ki delajo take reči s pythonom.
SciPy pa NumPy vsekakor poglej.
SciPy pa NumPy vsekakor poglej.
Isotropic ::
elCoord = [[elements.label] for elements in asm.elements + [coord for coord in node.coordinates] for node in asm.nodes]
ce se ne motim? tisto asm.instances... sem malo predelal.
ce se ne motim? tisto asm.instances... sem malo predelal.
jype ::
Tole pa ne vem če bo šlo. Če bi rad iteriral po dveh listih hkrati, boš moral uporabiti funkcijo zip.
Seveda morata biti asm.elements in asm.nodes enako dolga lista.
Seveda morata biti asm.elements in asm.nodes enako dolga lista.
Isotropic ::
jaz bi ju rad zdruzil v bistvu. kaj pa join ali kaj podobnega? pa nista enaka, niti pod razno ne (ce ima vsak el. 4 conn.), sta pa elcoord in asm.elements enako dolga.
lahko pa naredim nov list, dam not element.label in vanj zracunam tist kar rabim (normalo nanj). sam kako? naredim novo funkcijo in klicem podobno kot tam, sam da dam se extra tri argumente?
^dvomim oz. si ne predstavljam.
kako pa naredis c-style iteracijo skoz?
bom jutri napisal vec, zdaj sem ze res malo pozabil, kaj sem sploh hotel.
lahko pa naredim nov list, dam not element.label in vanj zracunam tist kar rabim (normalo nanj). sam kako? naredim novo funkcijo in klicem podobno kot tam, sam da dam se extra tri argumente?
^dvomim oz. si ne predstavljam.
kako pa naredis c-style iteracijo skoz?
bom jutri napisal vec, zdaj sem ze res malo pozabil, kaj sem sploh hotel.
Zgodovina sprememb…
- spremenil: Isotropic ()
Isotropic ::
no, imam torej element.label in node coords., zdaj bi pa rad naredil normalo na vektorja iz izhodisca prve node (glede na element tabelo).
torej
prva tocka pri connectivity je izhodisce, drugi dve pa definirata vektorja. kako zdaj iz tega poberem koordinate in izracunam (normalo na ta dva vektorja)? pa rad bi dal vse skup v nov list, ki bi imel el. label in vektor normale.
za cross mam pa tako funkcijo, naj bi delala, samo ni moja
EDIT: problem je malo vecji celo (tole zgoraj je samo od testnega parta, ker je zaresni prevelik za takle). vsak element ima 6 conn. tock (nodov) in dve povrsini za izracunat normalo.
torej
view sourceprint? ELEMENT CONNECTIVITY Number Type Connectivity 1 CAX4 3 43 41 42 44 45
prva tocka pri connectivity je izhodisce, drugi dve pa definirata vektorja. kako zdaj iz tega poberem koordinate in izracunam (normalo na ta dva vektorja)? pa rad bi dal vse skup v nov list, ki bi imel el. label in vektor normale.
za cross mam pa tako funkcijo, naj bi delala, samo ni moja
def cross(*args): ans = [[]] for arg in args: ans = [x+[y] for x in ans for y in arg] return ans print cross(s1,s2,s3)
EDIT: problem je malo vecji celo (tole zgoraj je samo od testnega parta, ker je zaresni prevelik za takle). vsak element ima 6 conn. tock (nodov) in dve povrsini za izracunat normalo.
Zgodovina sprememb…
- spremenil: Isotropic ()
Isotropic ::
no, spet nekaj:
imam list listov
[
[139255, 0.232169985771179, 0.0776765495538712, 0.214600414037704],
[139254, 0.229750648140907, 0.0788793191313744, 0.221687361598015],
...
]
zelim poiskati ostale vrednosti v vrstici, kjer je se nahaja dolocena vrednost (samo prva, recimo 139254); za vrednosti sicer ni receno, da so zaporedne. poskusil sem z
if '139254' in list
do sth
ampak ne prime. tole morem sicer ponoviti trikrat (za tri tocke), tako da me zanima tudi, ce se da narediti kaj z slice.
tisto zgoraj je ze zrihtano, mi je ratalo naredit iteracijo skozi list.
[x for x in node if node[0] = '139255'] ne vrne nicesar oz. prazen list
imam list listov
[
[139255, 0.232169985771179, 0.0776765495538712, 0.214600414037704],
[139254, 0.229750648140907, 0.0788793191313744, 0.221687361598015],
...
]
zelim poiskati ostale vrednosti v vrstici, kjer je se nahaja dolocena vrednost (samo prva, recimo 139254); za vrednosti sicer ni receno, da so zaporedne. poskusil sem z
if '139254' in list
do sth
ampak ne prime. tole morem sicer ponoviti trikrat (za tri tocke), tako da me zanima tudi, ce se da narediti kaj z slice.
tisto zgoraj je ze zrihtano, mi je ratalo naredit iteracijo skozi list.
[x for x in node if node[0] = '139255'] ne vrne nicesar oz. prazen list
Zgodovina sprememb…
- spremenil: Isotropic ()
Isotropic ::
for item in elSet: asm = odb.rootAssembly.instances['PART-1-1'] for el in asm.elementSets[item].elements: element.append([el.label, item, ]) for n in range(0,4): node1 = el.connectivity[n] element.append([asm.nodes[node1-1].coordinates])
sedaj dobim takole
element = [[label, item], [array(..., d)], (ponavljanje) ]
rad bi imel takole
element = [[label, item, array(..., d)], (ponavljanje) ]
kako moram predelat zgornjo zanko? vem, da moram nekam v drugi element. append nekam vriniti pozicijo (el), ce dam element[el].append... mi vrne list indices must be integers.
je mozno to narediti brez spreminjanja prve zanke?
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Davčne blagajne (strani: 1 2 3 4 … 24 25 26 27 )Oddelek: Programiranje | 333466 (73469) | Macketina |
» | [c#] iz class v classOddelek: Programiranje | 887 (761) | darkolord |
» | parsanje podatkov iz straniOddelek: Programiranje | 2015 (1810) | commissar |
» | Python iskanje podvojenih vrednostiOddelek: Programiranje | 1496 (1209) | BlueRunner |
» | problem z linuxom (rabim cimprej prosim)Oddelek: Operacijski sistemi | 1456 (1272) | Isotropic |