我必须将一个为另一个值指定一个值的函数应用于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,以及为什么我无法获得正确的结果。
答案 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. ]])