我有幾個相同形狀的陣列,并且想找到一種方法,不僅可以獲取每個單元格的最小值,還可以獲取最小值來自的陣列。我認為最好的方法是使用一個 n 維陣列來存盤每個二維陣列,這樣我就可以回傳每個單元格的最小值的索引。例如,假設我有 3 個陣列:
>>> import numpy as np
>>> a = np.random.random((3,3))
>>> b = np.random.random((3,3))
>>> c= np.random.random((3,3))
>>> arr = (a, b,c)
>>> print(arr[0])
[[0.29242554 0.408617 0.79015308]
[0.52468204 0.36527803 0.51636725]
[0.21796501 0.5780124 0.96879438]]
>>> print(arr[1])
[[0.48522564 0.24768296 0.22151351]
[0.04493776 0.82884756 0.89689985]
[0.30159678 0.47734114 0.47589837]]
>>> print(arr[2])
[[0.91569256 0.81359633 0.2493089 ]
[0.97324684 0.09040656 0.20129747]
[0.89355251 0.08643836 0.44796705]]
由此,我可以回傳一個在所有二維陣列中具有最小值的陣列:
np.minimum.reduce(arr)
array([[0.29242554, 0.24768296, 0.22151351],
[0.04493776, 0.09040656, 0.20129747],
[0.21796501, 0.08643836, 0.44796705]])
但是如何獲取這些值的索引,以便可以將其應用于另一組具有相同形狀和大小的陣列?:
uj5u.com熱心網友回復:
將a,b和c放入單個陣列中,然后將min()andargmin()方法與. 一起使用axis=0。
這是一個較小陣列的示例:
In [218]: a = np.array([[2.0, 3.0], [5.0, 7.0]])
In [219]: b = np.array([[1.5, 9.0], [4.5, 6.0]])
In [220]: c = np.array([[3.0, 6.5], [5.0, 5.0]])
將它們放入形狀為 (3, 2, 2) 的單個陣列中:
In [221]: arr = np.array((a, b, c))
In [222]: arr.shape
Out[222]: (3, 2, 2)
使用min()andargmin()方法獲取最小值及其索引:
In [223]: arr.min(axis=0)
Out[223]:
array([[1.5, 3. ],
[4.5, 5. ]])
In [224]: arr.argmin(axis=0)
Out[224]:
array([[1, 0],
[1, 2]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/436246.html
上一篇:按下一個最大值連續拆分陣列
