» »

python problem

python problem

Isotropic ::

imam takole
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.

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?

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)
>>> 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…

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.

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...?

Zgodovina sprememb…

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"

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.

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.

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.

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.

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.

Zgodovina sprememb…

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
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…

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

Zgodovina sprememb…

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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Davčne blagajne (strani: 1 2 3 424 25 26 27 )

Oddelek: Programiranje
1344333474 (73477) Macketina
»

[c#] iz class v class

Oddelek: Programiranje
5887 (761) darkolord
»

parsanje podatkov iz strani

Oddelek: Programiranje
132016 (1811) commissar
»

Python iskanje podvojenih vrednosti

Oddelek: Programiranje
181496 (1209) BlueRunner
»

problem z linuxom (rabim cimprej prosim)

Oddelek: Operacijski sistemi
111456 (1272) Isotropic

Več podobnih tem