我的问题
想象一下我有
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)])
还有更好的东西吗?
答案 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 ))