我有几个ndarrays
,它们的形状相同,我想得到一个数组(形状相同),每个元素的绝对值最大。因此,我决定堆叠所有数组,然后沿新的堆叠轴选择值。但是该怎么做?
假设我们有两个一维数组,每个数组有4个元素,所以我的堆叠数组看起来像
>>> stack
array([[ 4, 1, 2, 3],
[ 0, -5, 6, 7]])
如果我只想对最大数量感兴趣,那么
>>> numpy.amax(stack, axis=0)
array([4, 1, 6, 7])
但是我也需要考虑负值,所以我打算
>>> ind = numpy.argmax(numpy.absolute(stack), axis=0)
>>> ind
array([0, 1, 1, 1])
因此,现在我有了所需的索引,但是如何将其应用于堆叠数组?如果我只是将stack
索引为ind
,那么numpy正在做一些我不需要的广播工作:
>>> stack[ind]
array([[ 4, 1, 2, 3],
[ 0, -5, 6, 7],
[ 0, -5, 6, 7],
[ 0, -5, 6, 7]])
我想要得到的是array([4, -5, 6, 7])
或者从稍微不同的角度提出问题:如何根据numpy.amax(stack, axis=0)
返回的索引获取数组numpy.argmax(stack, axis=0)
?
答案 0 :(得分:3)
堆叠操作效率低下。我们可以简单地使用np.where
根据绝对值比较进行选择-
In [198]: a
Out[198]: array([4, 1, 2, 3])
In [199]: b
Out[199]: array([ 0, -5, 6, 7])
In [200]: np.where(np.abs(a) > np.abs(b), a, b)
Out[200]: array([ 4, -5, 6, 7])
这无需修改即可在通用n维数组上工作。
答案 1 :(得分:2)
如果您具有2D numpy ndarray,则不再适用经典索引。因此,要实现所需的功能,以避免产生麻烦,还必须使用2D数组进行索引:
>>> stack[[ind,np.arange(stack.shape[1])]]
array([ 4, -5, 6, 7])
答案 2 :(得分:0)
对于“普通” Python:
ldapmodify -x -W -D "cn=Manager,dc=domain,dc=com" -H ldapi:/// -f certs.ldif
Enter LDAP Password:
modifying entry "cn=config"
也许它也可以应用到>>> a=[[1,2],[3,4]]
>>> b=[0,1]
>>> [x[y] for x,y in zip(a,b)]
[1, 4]
上,我对Numpy不够熟悉。