我的问题有点类似,但仍然相当切合和与以下帖子相比,涉及更多:Create an ndarray from arrays of different lengths
我在arr1,arr2&中跟踪了3个时间序列变量。 ARR3。每次满足一组条件(称之为“转换”)时,我想将这些数组存储到我称之为db_arr的内容中。然后我按照某些逻辑重置3个数组。所以在&所以直到我的循环结束。这些数组的len可以不同。因此,在1次转换之后,db_arr应该是一个带有3行的二维数组(每个arr一个)&变量#列。我用vstack连接arr1,arr2& arr3,需要尺寸匹配。所以我将3个数组填充到其他参考数组A的len:
arr1 = np.lib.pad(arr1, (0, len(A)-len(arr1)), 'constant', constant_values=(0,0))
同样适用于arr2& ARR3。我可以然后vstack&将它们连接到db_arr,产生shape =(3,len(A))所需的2d数组。
我想沿着第三维连接这些2d'切片',将它们堆叠起来以创建深度。所以说在5次转换之后,db_arr会有shape =(3,len(A),5)。
Q1:我看过dstack,堆栈等等,但我似乎无法沿着这个新轴获得所需的连接。感觉我错过了一些简单的东西。
Q2:我说len(A)是不变的 - 事实并非如此。 arr1,arr2,arr3以及A的len从过渡到过渡都有所不同。因此,不仅必须如上所述每2d切片填充数组,我还需要为每个前一切片执行此操作,因为新转换会产生不同长度的切片。我可以在每次新的转换时填充所有切片的最大长度,但我想知道是否有更简单,更优雅的“pythonic”方法?
要清楚,我不能提前创建一个空数组或零数组,因为我的ndarray的维度是先验未知的。
示例:让timeseries = np.linspace(1,500,50) 循环通过时间序列。 arr1&根据某些逻辑构造/附加arr2。某些条件会触发“转换”,这需要清空arr1& arr2,但首先将它们连接到db_arr。在第一次转换时,比如arr1 = [1,2,3]& arr2 = [4,5,6,7]。假设转换发生在时间序列的索引= 14处。 vstack需要相等的dims,所以我可以将arr1填充为与arr2相同的len,或者在转换时将两者填充为len(时间序列)(即15)。或者允许我然后使用vstack((arr1,arr2)),然后连接到db_array。
现在说下一次转换发生在索引40处.arr1 = [8,9,10,11,12]& arr2 = [13,14]。我可以使用上述任何一种方法将它们填充为相同的len。我想沿着第三个维度连接这个'切片'。但是我填充了arr1& arr2,它们将与由arr1和amp;组成的先前切片不同。 arr2 vstacked。因此,我的问题。