numpy 循环遍历栅格堆栈的每个像素,并使用Python返回像素的时间序列

g2ieeal7  于 2022-11-10  发布在  Python
关注(0)|答案(1)|浏览(107)

我对Python语言还很陌生,我正在尝试循环遍历栅格堆栈,并以时间序列的方式存储像素。
例如,假设我有三个日期为2020、2021、2022的三个栅格:

A = array([[[0.2, 0.3, 0.4, 0.5,
              0.6, 0.7, 0.8, 0.9]],
            [[1.0, 1.1, 1.2, 1.3,
              1.4, 1.5, 1.6, 1.7]],
            [[1.8, 1.9, 2.0, 2.1,
              2.2, 2.3, 2.4, 2.5]]])

我想用数组创建一个新数组,数组的元素显示如下:

B = array([[0.2, 1.0, 1.8],
            [0.3, 1.1, 1.9],
            [0.4, 1.2, 2.0],
            ...
            [0.9, 1.7, 2.5]])

即,[0.2, 1.0, 1.8]由作为A的第一阵列的第一元素的第一元素(0.2)形成,第二元素(1.0)是A的第二阵列的第一元素,第三元素(1.8)是A的第三阵列的第一元素。则对于下一个数组[0.3, 1.1, 1.9],第一个元素(0.3)是第一个数组A的第二个元素。第二个元素(1.1)是第二个A数组的第二个元素,依此类推。
有什么简单的方法可以做到这一点而不需要很多循环吗?要获取一些数据:

data = np.random.random((3, 4, 4)) 
    stack = np.dstack(data) #just to change to (4,4,3), number of images for last
jogvjijk

jogvjijk1#

您可以使用下面的代码转置原始数组,我在转置后调整大小以消除额外的维度,但根据您的实际数据,您可能不需要/不想要它。

arr = np.array([
    [[0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]],
    [[1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7]],
    [[1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5]],
])
tr = arr.transpose()

# tr = array([

# [[0.2, 1. , 1.8]],

# [[0.3, 1.1, 1.9]],

# [[0.4, 1.2, 2. ]],

# [[0.5, 1.3, 2.1]],

# [[0.6, 1.4, 2.2]],

# [[0.7, 1.5, 2.3]],

# [[0.8, 1.6, 2.4]],

# [[0.9, 1.7, 2.5]],

# ])

reshaped = tr.reshape((8,3))

# reshaped = array([

# [0.2, 1. , 1.8],

# [0.3, 1.1, 1.9],

# [0.4, 1.2, 2. ],

# [0.5, 1.3, 2.1],

# [0.6, 1.4, 2.2],

# [0.7, 1.5, 2.3],

# [0.8, 1.6, 2.4],

# [0.9, 1.7, 2.5],

# ])

相关问题