有没有办法沿对角线对 x,y 数组进行切片?

Is there a way to slice an x,y array diagonally?

我有一个 3D 数组(时间、y 方向、x 方向),我想在空间上拆分它。但是,有没有一种方法可以沿对角线而不是仅在 y 和 x 中对空间数组进行切片?

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

data = np.random.rand(100,45,60)

data_1 = data[:,0:30,0:30]

X,Y = np.meshgrid(np.arange(0,60,1),np.arange(0,45,1))


plt.contourf(X,Y,data[2])
plt.show()

plt.contourf(data_1[2])
plt.xlim(0,60)
plt.ylim(0,45)
plt.show()

如果data,第一张图显示等高线图,然后是data_1,但是有没有办法切片它对角线?例如红线所在的位置。

我所说的切片是指仅在 x 和 y 方向上选择 3D 数据阵列的部分。比如只获取红色箭头下的数据

import numpy as np
from numpy import ma
import matplotlib.pyplot as plt

data = np.random.rand(5,45,60)
data1 = data[2,0:30,0:30]
x2, y2 = np.meshgrid(np.arange(0, 30, 1), np.arange(0, 30, 1))
data1 = ma.masked_where(x2 + y2 > 30, data1)

plt.contourf(x2, y2, data1)
plt.xlim(0,60)
plt.ylim(0,45)
plt.show()

我在上面使用了掩码数组,但也可以使用 np.where 并将值设置为 np.NaN:

data1 = np.where(x2 + y2 > 30, np.NaN, data1)

Matplotlib 也不会绘制 NaN 值。

但是,将值设置为 NaN 会丢失原始值,而掩码只会隐藏它们(移除掩码将恢复原始值)。 NaN 在比较中也很棘手。所以戴口罩可能会更好