gpt4 book ai didi

python - 在python中获取列组合及其各自索引的乘积的最大值

转载 作者:太空宇宙 更新时间:2023-11-03 15:59:53 24 4
gpt4 key购买 nike

我有一个 M*N 维的 numpy 数组,其中数组的每个元素都是一个 float ,其值介于 0- 1.

输入:为了简单起见,我们考虑一个 3*4 数组:

a=np.array([
[0.1, 0.2, 0.3, 0.6],
[0.3, 0.4, 0.8, 0.7],
[0.5, 0.6, 0.2, 0.1]
])

我想一次考虑 3 列(例如,第一次迭代为 col 0,1,2,第二次迭代为 1,2,3)并获得最大值将这 3 列的所有可能组合相乘的值,并获取它们各自值的索引。

在这种情况下,我应该获得 0.5*0.6*0.8=0.24 的最大值以及给出最大值的值行的索引:(2,2,1) 在这种情况下。

输出:[[0.24,(2,2,1)],[0.336,(2,1,1)]]

我可以使用循环来做到这一点,但我想避免它们,因为它会影响运行时间,无论如何我可以在numpy中做到这一点吗?

最佳答案

这是使用 NumPy strides 的方法这对于滑动窗口操作来说据说是非常有效的,因为它 creates a view into the array没有实际复制 -

N = 3 # Window size
m,n = a.strides
p,q = a.shape
a3D = np.lib.stride_tricks.as_strided(a,shape=(p, q-N +1, N),strides=(m,n,n))
out1 = a3D.argmax(0)
out2 = a3D.max(0).prod(1)

示例运行 -

In [69]: a
Out[69]:
array([[ 0.1, 0.2, 0.3, 0.6],
[ 0.3, 0.4, 0.8, 0.7],
[ 0.5, 0.6, 0.2, 0.1]])

In [70]: out1
Out[70]:
array([[2, 2, 1],
[2, 1, 1]])

In [71]: out2
Out[71]: array([ 0.24 , 0.336])

如果需要,我们可以将这两个输出以该格式压缩在一起 -

In [75]: zip(out2,map(tuple,out1))
Out[75]: [(0.23999999999999999, (2, 2, 1)), (0.33599999999999997, (2, 1, 1))]

关于python - 在python中获取列组合及其各自索引的乘积的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40435772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com