2016-04-18 3 views
0

У меня есть следующая проблема и не найти никакого решения.Использование индекса параметра многомерного массива для функции

for index, value in numpy.ndenumerate(re): 
     re[index] += rec[(index)] 

Это не работает, к сожалению. Функция выглядит так:

def rec(x1, x2, x3, y1, y2, y3, z1, z2, z3): 

Размер индекса соответствует количеству параметров для функции. Я хочу сохранить его как можно более общее, поэтому

for [x1][x2][x3][y1][y2][y3][z1][z2][z3], value in numpy.ndenumerate(re): 
     re[index] += rec[(index)] 

не помогает. У тебя есть идея?

+0

Это описание не проблема, это какой-то код, и «это не работает» не объяснение. Пожалуйста, прочитайте, как построить [mcve]. – DSM

+0

Я просто хочу использовать в качестве параметров для функции значение индекса многомерного numpy.array. – HighwayJohn

+0

Для этого используйте 'np.meshgrid'. Вы создаете векторы для каждого измерения сначала 'x = np.arange (0,1,0.01)' и т. Д., Тогда 'np.meshgrid' будет генерировать n-мерную сетку, которую вы можете использовать в качестве ввода для вас' ufunc'. – roadrunner66

ответ

0

This doesn't work unfortunately не правильный путь, чтобы описать вашу проблему. Вы должны сообщить нам что-то об ошибке, которую вы получаете.

Но я думаю, что это как-то связано с rec, не будучи индексируемым, или имеет метод __getitem__.

Вы определяете функцию с большим количеством аргументов:

def rec(x1, x2, x3, y1, y2, y3, z1, z2, z3): 
    .... 

Затем вы должны назвать его как функцию. Это не список или массив.

rec(1,2,3,....) # should work 

или

index = (1,2,3,...) 
rec(*index) 

Если да, то следующий может работать:

for index, value in numpy.ndenumerate(re): 
     re[index] += rec(*index) 
+0

Ах спасибо, это было на самом деле решения, которые я искал! – HighwayJohn

0

2D-пример (IPython ноутбук)

import numpy as np 
import matplotlib.pyplot as p # just for visualization 
%matplotlib inline 

x=np.arange(0,1,0.01) # <-- give ranges to your parameters 
y=np.arange(0,1,0.01) 
xv, yv = np.meshgrid(x,y) # <--- generate the n-dimensional indeces 

zv= np.sin(xv + 3* yv) # <-- this is the ufunc, look ma: no for loops 

p.imshow(zv,aspect ='1') 

enter image description here

+0

Спасибо :) Это помогло – HighwayJohn

+0

Видимо не :) – roadrunner66

+0

Извините, другое решение просто помогло больше: D – HighwayJohn

Смежные вопросы