![](/img/trans.png)
[英]Multiply each row of one array with each element of another array in numpy
[英]Find maximum of each row in a numpy array and the corresponding element in another array of the same size
我是Python的新手,仍然不能称自己为Python程序员。 说到这一点,如果我的问题没有任何意义,请耐心等待。
我有两个相同大小的numpy数组,例如A和B,其中A.shape等于B.shape并且它们都相等(5,1000),我想找到A中每行的最大值和相应的元素例如,如果在A的第四行中,最大元素索引是104,那么我想在数组B中找到第四行的第104个元素,而对于其余行则相同。
我知道我可以通过循环遍历行来实现它,但我想知道是否有更优雅的方式。 例如,如果我在MATLAB中这样做,我会写下面的代码:
B(bsxfun(@eq,A,max(A,[],2)))
任何指导我通过正确方向的帮助将非常感激。
这是做同样事情的numpy
成语:
b[np.arange(len(a)), np.argmax(a, axis=1)]
例如:
>>> a = np.array([
[1, 2, 0],
[2, 1, 0],
[0, 1, 2]
])
>>> b = np.array([
[1, 2, 3],
[1, 2, 3],
[1, 2, 3]
])
>>> b[np.arange(len(a)), np.argmax(a, axis=1)]
array([2, 1, 3])
作为一个bsxfun
爱好者,很bsxfun
看到人们试图将相同的功能复制到其他编程语言。 现在, bsxfun
基本上是一种broadcasting
机制,它也存在于NumPy中。 在NumPy中,它是通过使用np.newaxis
创建单例维度或简单地为None
。
回到上下文中的问题,可以实现基于广播的equivalent
解决方案,如示例运行所示 -
In [128]: A
Out[128]:
array([[40, 63, 67, 65, 19],
[85, 55, 66, 92, 88],
[50, 1, 23, 6, 59],
[67, 55, 46, 78, 3]])
In [129]: B
Out[129]:
array([[78, 63, 45, 34, 81],
[ 5, 38, 28, 61, 66],
[ 3, 65, 16, 25, 32],
[72, 1, 31, 75, 6]])
In [130]: B[A == A.max(axis=1)[:,None]]
Out[130]: array([45, 61, 32, 75])
print np.max(A[i])
这将给出numpy
矩阵的第i
行中的最高值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.