我的问题
想象一下我有
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 ))