【问题标题】:Extract every value in a 3D (time, lat, lon) array and create a list or 1D array提取 3D(时间、纬度、经度)数组中的每个值并创建一个列表或 1D 数组
【发布时间】:2017-12-03 05:56:21
【问题描述】:

如果这很简单,请原谅我,但我是 python 新手。我有每天的风速数据,每个纬度(180)和经度(360)和时间(6624)都有一个数据点,这是一个带有 numpy.shape(时间、纬度、经度)的 3D 数组。我正在尝试提取每个风速并将其放入新的数组或列表中,以便绘制直方图或概率密度函数。 python有没有办法提取这些值中的每一个?

【问题讨论】:

  • 你的意思是你需要矩阵的每一行带有纬度、经度和时间来生成函数?
  • 是的,有 6624 天的风速数据,每个 lat 和 lon 单元格都有一个值,关键是能够查看特定单元格并提取 6624 个风速来创建一个直方图是否有意义。感谢您提供的任何见解。
  • 提供几行 3d 数组,因为切片会根据数组的形状而改变
  • 你看过here
  • 这里是数据样本 (wind_speedjja[0:1,:,:]) 数组([[[ 3.84302425, 3.85788465, 3.87297344, ..., 3.79931521, 3.81356525, 3.82767272], [ 2.61478281,2.61992002,2.62531614,...,2.6005969,2.60529995,2.60992217],...,[7.33358574,7.19630527,7.33323956,...,7.54264212,7.53644514,7.49996758],[7.13919353,7.22122383,7.55467606,..., 6.97763348, 7.11504269, 7.16432858]]], dtype=float32)

标签: python arrays numpy 3d histogram


【解决方案1】:

所以如果你这样做wind_speedjja.shape,你会得到(6624, 180, 360)

这不是一个有效的答案,更多是为了说明嵌套循环而写的。

all_wsp = np.array([])
mtx = wind_speed.shape
for idx_lat in range(mtx[1]):
    for idx_long in range(mtx[2]):
        lat_long_wsp = wind_speed[:, idx_lat, idx_long]
        # do a plot on lat_long_wsp, or your histogram
        all_wsp = np.concatenate((all_wsp, lat_long_wsp))
        # all_wsp will be all single values in a flattened array

如果您只是在扁平化数组之后,请执行flat_wsp = windspeed.flatten()

【讨论】:

  • 对,就是wind_speedjja的形状。
  • 该代码看起来可能有效。我现在正在测试它,但是,有这么多数据点,需要很长时间。一旦我得到结果,我会更新。谢谢!
【解决方案2】:

您的数据量很大,因此您必须首先拥有全局方法。

作为一个玩具示例:

from pylab import *

wind = rand(662,18,36)
means = wind.mean(axis=0)
subplot(121)
hist(means.ravel(),100)  
subplot(122)
imshow(means)
colorbar()
show()

然后你可以决定你要细化哪个区域。

【讨论】:

    猜你喜欢
    • 2020-12-26
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 2013-08-17
    相关资源
    最近更新 更多