2 fragen zu arrays

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kommando_pimperlepim
User
Beiträge: 23
Registriert: Dienstag 3. April 2007, 05:32

hallo,

hätte gerne mal zwei sachen gewusst, die bestimmt jemand von euch weiß.

1. kann man in python auch sowas tun, was ich als jemand der es nicht kennt inverses slicing nennen würde?

d. h. ich habe z. b.

Code: Alles auswählen

a=[1,2,3]
b=[4,5]
wie erhalte ich [1,2,3,4,5] ?

2.

Code: Alles auswählen

a=[1,2,3]
b=array([1,2,3])
was ist der unterschied zwischen a & b ?
Andy
User
Beiträge: 196
Registriert: Sonntag 1. Januar 2006, 20:12
Wohnort: aus dem hohen Norden....

zu 1) Mit a+b

zu 2) Das array-modul in der Doku
Zuletzt geändert von Andy am Sonntag 27. Mai 2007, 14:23, insgesamt 1-mal geändert.
BlackJack

Das "inverse slicing" (darauf wäre ich nie gekommen) nennt sich konkatenieren oder aneinanderhängen und geht mit ``+``:

Code: Alles auswählen

In [14]: a = [1, 2, 3]

In [15]: b = [4, 5]

In [16]: a + b
Out[16]: [1, 2, 3, 4, 5]
Bei 2. ist der Unterschied, dass `a` funktioniert und `b` einen NameError ergibt:

Code: Alles auswählen

In [17]: b = array([1, 2, 3])
---------------------------------------------------------------------------
exceptions.NameError          Traceback (most recent call last)

/home/new/<ipython console>

NameError: name 'array' is not defined
Wo hast Du denn `array()` her? Schau da in der Doku nach.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

`array` ist auf bestimmte Dinge wie Geschwindigkeit optimiert. Für den Alltagsgebrauch im kleinen Rahmen reichen Tupel und Listen aber fast immer aus.
kommando_pimperlepim
User
Beiträge: 23
Registriert: Dienstag 3. April 2007, 05:32

danke für eure schnellen antworten.

zu 1. hat mich das + schon gewundert. ich dachte immer so kann man bei gleichgroßen arrays elementweise addieren.

da ihr mich von diesem irrglaube befreit habt, könntet ihr mir noch verraten wie das addieren dann wirklich geht?
Andy
User
Beiträge: 196
Registriert: Sonntag 1. Januar 2006, 20:12
Wohnort: aus dem hohen Norden....

Code: Alles auswählen

>>> a=[4 +2, 4 - 2, 4 * 2, 4/2, 4**2]
>>> a
[6, 2, 8, 2, 16]
[/code]
Zuletzt geändert von Andy am Sonntag 27. Mai 2007, 15:03, insgesamt 3-mal geändert.
BlackJack

@kommando_pimperlepim: Vorweg: Listen sind keine Matrizen, Vekoren oder mathematische Felder.

Code: Alles auswählen

In [18]: a = [1, 2, 3]

In [19]: b = [4, 5, 6]

In [20]: import operator

In [21]: map(operator.add, a, b)
Out[21]: [5, 7, 9]
Ansonsten gibt's für die Fälle wo man gerne Matrizen haben möchte das `numpy`-Paket:

Code: Alles auswählen

In [23]: a = numpy.array([1, 2, 3])

In [24]: b = numpy.array([4, 5, 6])

In [25]: a + b
Out[25]: array([5, 7, 9])
kommando_pimperlepim
User
Beiträge: 23
Registriert: Dienstag 3. April 2007, 05:32

genau das ist der grund für meine falsche vorstellung vom pluszeichen. ich kenne python nur von einer vorlesung, in der wir immer mir numpy arbeiten und da steht es für die elementweise summe.

Code: Alles auswählen

from numpy import *

a=[1,2]
b=[3,4]
print a+b
a=array([1,2])
b=array([3,4])
print a+b
jetzt ist alles klar, vielend dank nochmal!
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Über die Methode `__add__` kann man den "+"-Operator einer Klasse überladen und entsprechend (hoffentlich) nachvollziehbares und sinnvolles damit tun lassen. So werden darüber ja auch Strings konkateniert.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

BlackJack hat geschrieben:

Code: Alles auswählen

In [18]: a = [1, 2, 3]

In [19]: b = [4, 5, 6]

In [20]: import operator

In [21]: map(operator.add, a, b)
Out[21]: [5, 7, 9]
Alternativ ginge auch:

Code: Alles auswählen

a = [1, 2, 3]
b = [4, 5, 6]
[x+y for x,y in zip(a,b)]
Antworten