尽管有许多与迭代3D数组相关的类似问题,并且在尝试了诸如numpy的nditer
等函数之后,我仍然对如何实现以下目标感到困惑:
我有一个尺寸(30,11,300)的信号,它是11个信号的30次试验,包含300个信号点。在
让这个信号用变量x_
表示
我有另一个函数,它将一个(11300)矩阵作为输入,并将其绘制在1个图形上(11个信号包含300个信号点,绘制在一个图形上)。设此函数为sliding_window_plot
。在
目前,我可以让它这样做:
x_plot = x_[0,:,:]
for i in range(x_.shape[0]):
sliding_window_plot(x_plot[:,:])
它在一个图上绘制相同的(第一次试验)11个信号,包含300个点,30次。 我要它画出第I组信号。不是第一次(第0次)尝试信号。有什么建议吗?在
您正在对for循环外的第0个切片进行硬编码。您需要创建
x_plot
以进入循环。实际上,您可以通过根本不使用x_plot
来简化代码。在for i in rangge(x_.shape[0]): sliding_window_plot(x_[i])
一般来说,对于n>;1的所有nD数组,可以迭代数组的第一个维度,就像迭代任何其他iterable一样。要检查数组是否为iterable,可以使用
np.iterable(arr)
。下面是一个例子:因此,在每次迭代中,我们都会得到一个矩阵(形状为
(4, 5)
)作为输出。总共有3个这样的输出组成了形状(3, 4, 5)
的3D数组如果出于某种原因,您想在其他维度上迭代,那么可以使用
numpy.rollaxis
将所需的轴移动到第一个位置,然后按iterating-over-arbitrary-dimension-of-numpy-array中所述对其进行迭代注意:已经说过,
numpy.rollaxis
只为向后兼容而维护。因此,建议使用numpy.moveaxis
代替将所需的轴移动到第一个维度。在您应该能够使用
for
循环迭代第一个维度:每次迭代,
s
将是下一个shape数组(11300)。在相关问题 更多 >
编程相关推荐