Seite 1 von 1

Array indexing mit "algopy"

Verfasst: Dienstag 19. März 2013, 00:22
von SimPy
Hallo Forum,

folgender Quellcode funktioniert einwandfrei:

Code: Alles auswählen

import numpy
def fep(x):
    """ some function """
    y = numpy.zeros(3)
    pos = numpy.array([0,1,2])
    y[pos] = x[pos] + 1
    return y

x_array = numpy.array([3,4,5])
print(fep(x_array))
Also habe ich versucht, das auf algopy zu übertragen:

Code: Alles auswählen

def fun(x):
    """ some function """
    y = numpy.zeros(3)
    pos = numpy.array([0,1,2])
    y[pos] = x[pos] + 1
    return y

# forward mode without building the computational graph
# -----------------------------------------------------
x = UTPM.init_jacobian(numpy.array([3,4,5]))
y = fun(x)
algopy_jacobian = UTPM.extract_jacobian(y)
print 'jacobian = ', algopy_jacobian
Leider ohne Erfolg. Er bringt folgende Fehlermeldung:

Code: Alles auswählen

y[pos] = x[pos] +1 
File "C:\Python26\lib\site-packages\algopy\utpm\utpm.py", line 70 in__getitem__ if isinstance(sl, int) or sl == Ellipsis or isinstance(sl, slice): ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Was habe ich verbockt?

Re: Array indexing mit "algopy"

Verfasst: Dienstag 19. März 2013, 01:41
von anogayales
Schreib doch mal

Code: Alles auswählen

y[pos] = x[pos] + 1
in

Code: Alles auswählen

return x + 1
um, das ist doch was die Funktion machen soll? Wenn du später nur bestimmte Indizes addieren willst, kann man das ja auch anders lösen.

Es sieht danach aus, also ob algopy nicht mit der Indizierung zurecht kommt. Im speziellen ist es wahrscheinlich dieser Vergleich

Code: Alles auswählen

sl == Ellipsis
Du könntest natürlich einfach in die Sourcen gehen und diesen korrigieren :P https://github.com/b45ch1/algopy/blob/m ... pm/utpm.py

Grüße,
anogayales

Re: Array indexing mit "algopy"

Verfasst: Dienstag 19. März 2013, 09:25
von SimPy
Wenn du später nur bestimmte Indizes addieren willst, kann man das ja auch anders lösen.
Gerade um die bestimmten Indizes geht es mir! Das Beispiel, das ich gegeben habe ist nur stellvertretend für ein viel größeres Anwendungsproblem. Wenn ich die Indizierung für das kleine Beispiel lösen kann, dann - so mein Hoffnung - kann ich es auch für das große Problem knacken.

Re: Array indexing mit "algopy"

Verfasst: Dienstag 19. März 2013, 13:24
von SimPy
@ anogayales: Dann frage ich mal anders: Wie wendest Du eine Array-Indizierung in "algoPy" an?

Re: Array indexing mit "algopy"

Verfasst: Dienstag 19. März 2013, 15:49
von anogayales
Du kannst es ja ganz naiv in einer Schleifer lösen.

Also etwa so:

Code: Alles auswählen

In [2]: y = array([0,1,2])

In [3]: x = array([5,5,5])

In [4]: for index in y:
   ...:     x[index] += 1
   ...:

In [5]: x
Out[5]: array([6, 6, 6])
Ich würde dir aber trotzdem empfehlen einfach die Source zu fixen :P

Grüße,
anogayales