尽管存在许多与遍历3D数组有关的类似问题,但在尝试了一些类似numpy的功能nditer
之后,我仍然对如何实现以下目标感到困惑:
我有一个尺寸为(30,11,300)的信号,它是包含300个信号点的11个信号的30次试验。
让此信号用变量x_
我有另一个函数,将一个(11,300)矩阵作为输入并将其绘制在1个图上(11个信号包含在单个图上绘制的300个信号点)。将此函数设为sliding_window_plot
。
目前,我可以做到这一点:
x_plot = x_[0,:,:]
for i in range(x_.shape[0]):
sliding_window_plot(x_plot[:,:])
绘制THE SAME(首次试用),在1个图中绘制包含300个点的11个信号,共30次。 我希望它绘制第i组信号。并非每次都进行第一次(第0次)信号测试。有关如何尝试此操作的任何提示?
答案 0 :(得分:2)
通常对于n> 1的所有nD数组,您可以遍历数组的第一维,就好像您要遍历任何其他可迭代项一样。要检查数组是否可迭代,可以使用np.iterable(arr)
。这是一个示例:
In [9]: arr = np.arange(3 * 4 * 5).reshape(3, 4, 5)
In [10]: arr.shape
Out[10]: (3, 4, 5)
In [11]: np.iterable(arr)
Out[11]: True
In [12]: for a in arr:
...: print(a.shape)
...:
(4, 5)
(4, 5)
(4, 5)
因此,在每次迭代中,我们都会得到一个矩阵(形状为(4, 5)
)作为输出。总共有3个此类输出构成了形状为(3, 4, 5)
如果出于某种原因要迭代其他尺寸,则可以使用numpy.rollaxis
将所需的轴移至第一个位置,然后如iterating-over-arbitrary-dimension-of-numpy-array中所述在其上迭代
注意:所说的numpy.rollaxis
只是为了向后兼容而保留。因此,建议使用numpy.moveaxis
代替,将所需的轴移至第一维。
答案 1 :(得分:1)
您应该可以使用for
循环遍历第一维:
for s in x_:
sliding_window_plot(s)
每次迭代s
将是下一个形状数组(11,300)。
答案 2 :(得分:1)
您正在对for循环外的第0个分片进行硬编码。您需要创建x_plot
才能进入循环。实际上,您可以完全不使用x_plot
来简化代码。
for i in rangge(x_.shape[0]):
sliding_window_plot(x_[i])