Python 使用一个维度作为迭代器在3D numpy上迭代循环中的剩余维度
尽管有许多类似的问题与在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]
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
。