2015-04-06 68 views
0

我有一個3D的numpy.ndarray,我需要計算其漸變,並獲得一個新的相同尺寸的ndarray。我使用numpy.gradient來做,但它返回的是一個列表。我怎樣才能讓np.gradient返回一個np.ndarray?爲什麼Numpy.gradient返回一個列表而不是ndarray?

force = np.gradient(phi)*(-1) 

其中Phi是我300³矩陣,我不斷獲得

print(type(force)) 
    type : <class 'list'> 
+2

你已經證明不應該產生您已示出的輸出的代碼; 'gradient'應該返回一個數組,'print(type(force))'不應該以這種格式產生輸出。你可以將你的代碼剝離到[仍然包含漏洞部分的最小值,並且在運行時仍然顯示錯誤](http://stackoverflow.com/help/mcve),然後發佈它? – user2357112 2015-04-06 03:26:23

+1

給我們'phi'所以我們可以複製你的結果。這很奇怪,因爲'gradient'的文檔字符串表示它應該返回一個列表。你檢查過'np.gradient(phi)' - 也就是說'*( - 1)'是否是一個列表? – dbliss 2015-04-06 03:26:24

回答

1

文檔說gradient回報(名單)N arrays of the same shape as˚Fgiving the derivative of˚Fwith respect to each dimension.

np.gradient一個例子返回一個列表 - 2個陣列的列表

In [105]: np.gradient(np.array([[1, 2, 6], [3, 4, 5]], dtype=np.float)) 
Out[105]: 
[array([[ 2., 2., -1.], 
     [ 2., 2., -1.]]), 
array([[-0.5, 2.5, 5.5], 
     [ 1. , 1. , 1. ]])] 

一維輸入產生一個陣列

In [106]: np.gradient(np.array([1, 2, 6], dtype=np.float)) 
Out[106]: array([-0.5, 2.5, 5.5]) 

一個三維陣列給我3個陣列的列表:

In [110]: len(np.gradient(np.ones((30,30,30)))) 
Out[110]: 3 
相關問題