J'essaie d'appliquer une fonction à toutes les lignes d'un tableau numpy, cela fonctionne si les listes dans la rangée ont la même taille, mais échoue chaque fois que la taille est différente .appliquer le long de l'axe numpy avec différentes tailles de tableau
La fonction à appliquer
from math import *
import operator
def parseRPN(expression,roundtointeger=False):
"""Parses and calculates the result of a RPN expression
takes a list in the form of ['2','2','*']
returns 4
"""""
def safe_divide(darg1, darg2):
ERROR_VALUE = 1.
# ORIGINAL ___ Here we can penalize asymptotes with the var PENALIZE_ASYMPITOTES
try:
return darg1/darg2
except ZeroDivisionError:
return ERROR_VALUE
function_twoargs = {'*': operator.mul, '/': safe_divide, '+': operator.add, '-': operator.sub}
function_onearg = {'sin': sin, 'cos': cos}
stack = []
for val in expression:
result = None
if val in function_twoargs:
arg2 = stack.pop()
arg1 = stack.pop()
result = function_twoargs[val](arg1, arg2)
elif val in function_onearg:
arg = stack.pop()
result = function_onearg[val](arg)
else:
result = float(val)
stack.append(result)
if roundtointeger == True:
result=stack.pop()
result=round(result)
else:
result=stack.pop()
return result
PAS OK
dat=np.array([['4','5','*','6','+','3','/'],['4','4','*','6','*'],['4','5','*','6','+'],['4','5','*','6','+']])
lout=np.apply_along_axis(parseRPN,0,dat)
print(dat)
print(lout)
OK
dat=np.array([['4','5','*','6','+'],['4','4','*','6','*'],['4','5','*','6','+'],['4','5','*','6','+']])
lout=np.apply_along_axis(parseRPN,0,dat)
print(dat)
print(lout)
Suis-je utiliser la r outil de travail pour le travail? l'idée ici est de vectoriser le calcul sous une série de listes.
Merci
À quoi ressemble 'parseRPN'? – Kyle
ça marche pour moi si j'applique une autre fonction ('def test (a): retourne a;') au lieu de 'parseRPN' sur le premier tableau. Le problème peut-il être dans 'parseRPN'? –
Juste une note: Vous n'obtiendrez aucun gain de performance. 'apply_along_axis' n'est pas vectorisé et les tableaux non rectangulaires n'autorisent pas non plus la vectorisation. –