Python:查找数组中每列最小值和最大值的最快方法



我的问题

想象一下我有

array1 = np.array([ [1,2] , [3,4], [4,5] ])
array2 = np.array([ [2,5] , [1,4], [8,1] ])
# .... and so on until arrayn

其中第一列我们称之为"x",第二列我们称之为"y"。然后我把它们分组在一个容器里。

myList = [array1, array2,..., arrayn]

现在,查找整个arrayList的最小值和最大x值以及最小值和最大值y值的最快方法是什么?(即在所有数组中)

我真的很慢的尝试

newarray = np.array([[np.array([i[:,j].min() for i in myList]).min(), np.array([i[:,j].max() for i in myList]).max()] for j in range(2)])

还有更好的吗?

由于arrayList = np.array(myList)2D数组堆叠列表的3D输入数组,我们可以简单地对数组数据使用 ufunc 约min/max然后将它们堆叠在列中。在循环代码中,我们找到了沿最后一个轴的每个索引的所有元素之间的min/max,因此等效的减少将是3D堆叠数组中的前两个轴。

因此,实现看起来像这样 -

np.column_stack(( arrayList.min(axis=(0,1)), arrayList.max(axis=(0,1)) ))

上述方法的瓶颈可能是列表到数组的转换。因此,我们可以通过循环理解来避免这种情况,以执行一个级别的min/max缩减,然后再执行一个级别来覆盖所有输入数组 -1,2..n。因此,另一种解决方案是 -

minn = np.min([i.min(0) for i in myList],axis=0)
maxn = np.max([i.max(0) for i in myList],axis=0)
out = np.column_stack(( minn, maxn ))

相关内容

最新更新