2015-04-06 97 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 
相关问题