如果我有像下面这样的数组,如何检测在使用
以第一行为例,有一个“3路并列”。 3个值都是
因此,第一行:发现有4个“3路并列”。自定义函数运行,以便它可以决定打破平局。
第二行:“4路并列”同样的事情发生。
第三行:只有“2路并列”,这少于至少“3路并列”的条件。可以默认使用
np.argmax()
时至少有3个或更多值相同时的平局?examp = np.array([[4, 0, 1, 4, 4],
[5, 5, 1, 5, 5],
[1, 2, 2, 4, 1],
[4, 6, 1, 2, 4],
[1, 4, 3, 3, 3]])
np.argmax(examp, axis=1)
这会输出:
array([0, 0, 3, 1, 1]
以第一行为例,有一个“3路并列”。 3个值都是
4
。 np.argmax
返回具有最大值的第一个索引。但是,如何检测到正在进行“3路并列”,并让它使用自定义函数来决定打破平局(在至少出现“3路并列”的情况下)?因此,第一行:发现有4个“3路并列”。自定义函数运行,以便它可以决定打破平局。
第二行:“4路并列”同样的事情发生。
第三行:只有“2路并列”,这少于至少“3路并列”的条件。可以默认使用
np.argmax。
examp
中的每一行取最大索引。这里没有"四方平局"。但是如果你执行examp.argmax(0)
,将会出现这样的平局。 - undefinedexamp[np.r_[:5],indices]
并返回了array([4, 5, 4, 6, 4])
,这些是每行的最大值。我猜你的 examp == 是用来检查原始数组是否与这个一维数组中的任何值匹配的。但是,无论我是使用axis=0
还是axis=1
,它都是按列进行检查,而不是逐行进行。为什么在这里改变轴没有任何影响呢? - undefinedexamp == examp[np.r_[:5],indices]
时,你是在对examp[np.r_[:5],indices]
的每一行进行广播,与examp
中的每一行进行比较。虽然改变轴会对结果产生影响,但是我不确定你所说的具体含义。 - undefined