2016-04-18 86 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

二維例子(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