这是我在 Python 2.7 中尝试使用 Numpy 做的事情。假设我有一个数组 a
定义如下:
a = np.array([[1,3,3],[4,5,6],[7,8,1]])
我可以执行 a.argmax(0)
或 a.argmax(1)
来获取行/列明智的 argmax:
a.argmax(0)
Out[329]: array([2, 2, 1], dtype=int64)
a.argmax(1)
Out[330]: array([1, 2, 1], dtype=int64)
但是,当 a
的第一行出现平局时,我希望在平局之间随机决定 argmax(默认情况下,每当出现平局时,Numpy 都会返回第一个元素在 argmax 或 argmin 中)。
去年,有人提出了一个关于随机解决 Numpy argmax/argmin 关系的问题:Select One Element in Each Row of a Numpy Array by Column Indices
但是,题目针对的是一维数组。在那里,投票最多的答案对此很有效。还有第二个答案也试图解决多维数组的问题,但不起作用 - 即它不返回,对于每一行/列,最大值的索引与随机解决的关系。
既然我正在处理大数组,那么执行此操作的最有效方法是什么?
最佳答案
一种简单的方法是在开始时将一个小的随机数添加到所有值中,因此您的数据将如下所示:
a = np.array([[1.1827,3.1734,3.9187],[4.8172,5.7101,6.9182],[7.1834,8.5012,1.9818]])
这可以通过 a = a + np.random.random(a.shape)
来完成。
如果您稍后需要取回原始值,您可以执行 a.astype(int)
来删除小数部分。
关于python - Numpy 数组 : row/column wise argmax with random ties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51914697/