Python 使用一个维度作为迭代器在3D numpy上迭代循环中的剩余维度

Python 使用一个维度作为迭代器在3D numpy上迭代循环中的剩余维度,python,numpy,multidimensional-array,iterator,numpy-ndarray,Python,Numpy,Multidimensional Array,Iterator,Numpy Ndarray,尽管有许多类似的问题与在3D数组上迭代有关,并且在尝试了numpy的nditer等功能后,我仍然对如何实现以下目标感到困惑: 我有一个尺寸(30,11300)的信号,这是包含300个信号点的11个信号的30次试验 让该信号由变量x_uz 我有另一个函数,它将(11300)矩阵作为输入,并将其绘制在一个图上(11个信号包含300个信号点,绘制在一个图上)。将此函数设置为滑动窗口绘图 目前,我可以让它这样做: x_plot = x_[0,:,:] for i in range(x_.shape[0]

尽管有许多类似的问题与在3D数组上迭代有关,并且在尝试了numpy的
nditer
等功能后,我仍然对如何实现以下目标感到困惑:

我有一个尺寸(30,11300)的信号,这是包含300个信号点的11个信号的30次试验

让该信号由变量
x_uz

我有另一个函数,它将(11300)矩阵作为输入,并将其绘制在一个图上(11个信号包含300个信号点,绘制在一个图上)。将此函数设置为滑动窗口绘图

目前,我可以让它这样做:

x_plot = x_[0,:,:]
for i in range(x_.shape[0]):
    sliding_window_plot(x_plot[:,:])
它绘制了相同的(第一次试验)11个信号,在1个图上包含300个点,30次。
我想让它画出第I组信号。并非每次都是第一次(第0次)试用信号。关于如何尝试此操作的任何提示?

您应该能够使用
for
循环迭代第一个维度:

for s in x_:
    sliding_window_plot(s)

在每次迭代中,
s
将是下一个形状数组(11300)。

您应该能够使用
for
循环迭代第一个维度:

for s in x_:
    sliding_window_plot(s)

在每次迭代中,
s
将是下一个形状数组(11300)。

您正在对for循环外的第0个切片进行硬编码。您需要创建
x_plot
才能进入循环。事实上,您可以通过根本不使用
x\u plot
来简化代码


对于rangge中的i(x_u.shape[0]):
滑动窗口图(x[i])

您正在对for循环外的第0个片进行硬编码。您需要创建
x_plot
才能进入循环。事实上,您可以通过根本不使用
x\u plot
来简化代码


对于rangge中的i(x_u.shape[0]):
滑动窗口图(x[i])

通常,对于n>1的所有nD数组,您可以迭代数组的第一个维度,就像迭代任何其他iterable一样。要检查数组是否为iterable,可以使用
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个这样的输出构成了形状的3D数组
(3,4,5)


如果出于某种原因,您希望迭代其他维度,则可以使用
numpy.rollaxis
将所需的轴移动到第一个位置,然后按照中所述进行迭代



注意:已经说过,
numpy.rollaxis
只是为了向后兼容而维护的。因此,建议使用
numpy.moveaxis
将所需的轴移动到第一维度。

通常,对于n>1的所有nD数组,可以迭代数组的第一维度,就像迭代任何其他iterable一样。要检查数组是否为iterable,可以使用
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个这样的输出构成了形状的3D数组
(3,4,5)


如果出于某种原因,您希望迭代其他维度,则可以使用
numpy.rollaxis
将所需的轴移动到第一个位置,然后按照中所述进行迭代



注意:已经说过,
numpy.rollaxis
只是为了向后兼容而维护的。因此,建议使用
numpy.moveaxis
将所需轴移动到第一个维度。

。谢谢TIL numpy阵列是可移植的。谢谢
rollaxis
仅为向后兼容而维护,相反,鼓励使用
moveaxis
rollaxis
仅为向后兼容而维护,相反,鼓励使用
moveaxis