应用函数将数组除以向量

时间:2019-07-09 21:35:24

标签: python numpy multidimensional-array

我必须将一个为另一个值指定一个值的函数应用于numpy数组的每一行。

此处的功能:

def myfunc(a, b):
   return (a/b)

我的numpy ndarray看起来像这样,它代表“ a”值:

[[ 1  2  3  4 ]
 [ 5  6  7  8 ]]

还有我的列表,它是我的b值,如下所示:

[1, 2, 3, 4]

我想要的结果是:

[[1 1 1 1]
 [5 3 2.33 2]]

要做到这一点,我不能使用循环,所以我尝试使用np.vectorize。这是我的代码:

test = np.vectorize(myfunc)
test(a, b)

此返回:

array([[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[1]
<NDArray 1 @cpu(0)>,

[1]
<NDArray 1 @cpu(0)>,

[1]
<NDArray 1 @cpu(0)>,

[1]
<NDArray 1 @cpu(0)>]]]]]]]]]]]]]]]]]]]]]]]]]]]]]],
...

所以每个单元格都被b的第一个值乘以4。

但由于未知原因,我的代码不适用于ndarray。当我尝试使用普通数组时,它可以工作。示例:

a = np.array([[1, 2, 3, 4], [5,6,7,8]])
b = [1,2,3,4]
def my(coord, shape):
   return (coord/shape)
myfunc = np.vectorize(my)
myfunc(a, b)

结果:

array([[1.        , 1.        , 1.        , 1.        ],
       [5.        , 3.        , 2.33333333, 2.        ]])

你们知道我能做什么吗?我真的不知道如何获得ndarray,以及为什么我无法获得正确的结果。

1 个答案:

答案 0 :(得分:0)

您为什么需要np.vectorize

In [511]: a = np.array([[1, 2, 3, 4], [5,6,7,8]]) 
     ...: b = [1,2,3,4]                                                                                      

In [512]: b = np.array(b)                                                                                    
In [513]: a.shape                                                                                            
Out[513]: (2, 4)
In [514]: b.shape                                                                                            
Out[514]: (4,)
In [515]: a / b                                                                                              
Out[515]: 
array([[1.        , 1.        , 1.        , 1.        ],
       [5.        , 3.        , 2.33333333, 2.        ]])