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

时间:2017-09-01 08:27:27

标签: python arrays numpy scipy

我的问题

想象一下我有

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值以及最小和最大值的最快方法是什么? (即在所有阵列中)

我的尝试非常慢

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)])

还有更好的东西吗?

1 个答案:

答案 0 :(得分:1)

如果arrayList = np.array(myList)3D数组堆叠列表的2D输入数组,我们可以简单地对数组数据使用min/max ufunc缩减,然后将它们堆叠起来列。在循环代码中,我们在最后一个轴上的每个索引的所有元素中找到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 ))