Seite 1 von 1

2 fragen zu arrays

Verfasst: Sonntag 27. Mai 2007, 14:00
von kommando_pimperlepim
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 ?

Verfasst: Sonntag 27. Mai 2007, 14:12
von Andy
zu 1) Mit a+b

zu 2) Das array-modul in der Doku

Verfasst: Sonntag 27. Mai 2007, 14:15
von 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.

Verfasst: Sonntag 27. Mai 2007, 14:24
von Y0Gi
`array` ist auf bestimmte Dinge wie Geschwindigkeit optimiert. Für den Alltagsgebrauch im kleinen Rahmen reichen Tupel und Listen aber fast immer aus.

?

Verfasst: Sonntag 27. Mai 2007, 14:28
von kommando_pimperlepim
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?

Verfasst: Sonntag 27. Mai 2007, 14:33
von Andy

Code: Alles auswählen

>>> a=[4 +2, 4 - 2, 4 * 2, 4/2, 4**2]
>>> a
[6, 2, 8, 2, 16]
[/code]

Verfasst: Sonntag 27. Mai 2007, 14:59
von 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])

ok

Verfasst: Sonntag 27. Mai 2007, 19:08
von kommando_pimperlepim
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!

Verfasst: Sonntag 27. Mai 2007, 19:40
von Y0Gi
Ü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.

Verfasst: Montag 28. Mai 2007, 10:49
von Joghurt
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)]