Python 二维线绘制给定选定轴的三维Numpy矩阵/阵列

Python 二维线绘制给定选定轴的三维Numpy矩阵/阵列,python,numpy,matplotlib,Python,Numpy,Matplotlib,如何从Numpy阵列的选定轴快速绘制二维线 类比:当求和任意矩阵σ相对于轴=0,我会写: import numpy as np import matplotlib.pyplot as plt sigma = np.array([ [[0. , 0.9, 0.6], [0. , 0. , 0.4], [0. , 0. , 0. ]], [[0. , 0.8, 0.5], [0. , 0. , 0.3],

如何从Numpy阵列的选定轴快速绘制二维线

类比:当
求和
任意矩阵
σ
相对于
轴=0
,我会写:

import numpy as np
import matplotlib.pyplot as plt

sigma = np.array([

       [[0. , 0.9, 0.6],
        [0. , 0. , 0.4],
        [0. , 0. , 0. ]],

       [[0. , 0.8, 0.5],
        [0. , 0. , 0.3],
        [0. , 0. , 0. ]],

       [[0. , 0.7, 0.4],
        [0. , 0. , 0.2],
        [0. , 0. , 0. ]]
        
        ])

np.sum(sigma, axis=0)
结果:

array([[0. , 2.4, 1.5],
       [0. , 0. , 0.9],
       [0. , 0. , 0. ]])
我正在寻找一种等效的直接方法来绘制
轴=0
,类似于:

plt.plot(sigma, axis=0)
plt.plot(sigma[:,:,2])
这意味着,我将在每个对应位置绘制矩阵的深度。在图中,我将看到三条线,一条线在x=1时的值为0.9,在x=2时的值为0.8,在x-3时的值为0.7。同样,对于第二行和第三行,[0.6,0.5,0.4];[0.4,0.3,0.2]

我可以找到示例和方法(涉及
slice
len
),该方法将产生类似于以下的解决方案:

plt.plot(sigma, axis=0)
plt.plot(sigma[:,:,2])
但是,我无法让它在x轴上绘图(x=1..3,表示数组的每一层)

我该怎么做

更新:解决方案似乎是:

plt.plot(sigma[:,:,:].reshape((3, 9)))

如果我理解了你的问题,你的第一个维度是一个时间,你在每个时间点都有一个2D数组,你想看看2D数组中给定的索引是如何演变的

一种方法是(假设您有一个大的数据集,那么您不必一直复制数据),将原始的
sigma
数组展平,并为二维数组位置编制索引

>sigma.flatte()
数组([0,0.9,0.6,0,0,0,0.4,0,0,0,0,0,0,0.8,0.5,0.],
0. , 0.3, 0. , 0. , 0. , 0. , 0.7, 0.4, 0. , 0. , 0.2, 0. , 0. ,
0. ])
然后,对于3x3案例中的每个时间步,您可以得到:

  • [0,0]通过索引位置[0,9,18]处的数据进行索引
  • [0,1]通过索引[1,10,19]进行索引
展平阵列的等

基于示例数据的快速演示:

将numpy导入为np
将matplotlib.pyplot作为plt导入
sigma=np.array([
[[0., 0.9, 0.6],
[0., 0.,  0.4],
[0., 0.,  0.]],
[[0., 0.8, 0.5],
[0., 0.,  0.3],
[0., 0.,  0.]],
[[0., 0.7, 0.4],
[0., 0.,  0.2],
[0., 0.,  0.]]
])
n、 a,b=西格玛形状
n_ar=a*b#二维阵列的透镜
x=np.arange(n)#二维阵列切片索引[0,1,2]
sigma_flat=sigma.flatte()#展平为1D数组并索引点
图,ax=plt.subplot()#设置图形和轴
对于范围内的i(n_ar):
idxs=x*n_ar+i#获取平坦阵列的索引
ax.plot(x+1,sigma_平面[idxs],label=f'Loc{i})
图图例()
plt.show()
返回:


这就是你想要做的吗?

很难准确理解你需要什么。我不知道你画轴是什么意思。在我看来,您试图从数组中某个切片(:,:,2)的每一行绘制三个点。在这种情况下,您希望参数“axis”具有什么功能?你说的“1,2,3 x轴”是什么意思?你的意思是你想把y中的每个点都放在x轴上[1,2,3]的位置吗?嗨,Yan,关于axis,我的意思是如何将3D矩阵切割成2D形状,假设你有三层,每层代表一个时间点,所以在t=0时你有一个3x3数组,在t=1时你有另一个3x3数组。如何绘制,例如,在这三个时间点的右上角的值,例如绘制0.6、0.5和0.4(阵列中的右上位置)。当你求和(np.sum(sigma,axis-0)时,你将对这个由三个值组成的维度求和。希望这更清楚一点
plt_ij=lambda i,j:plt.plot(sigma[:,i,j])
谢谢,我也通过:plt.plot(sigma[,:,:])重塑((3,9)))