Numpy 3D 数组(NetCDF 数据)切片相同的元素 - 最快的方法

Numpy 3D array (NetCDF data) slicing same element - the fastest way

我需要对 3D numpy 数组中的相同元素进行切片(实际上是屏蔽数组,但工作原理相同)。我通常通过迭代来完成——但是当前数据非常庞大,需要在数千个数据集上重复这个过程——这将需要数周时间(原始估计)。在不遍历所有 2D 数组的情况下切片 3D 数组的最快方法是什么?

在这个简单的例子中,我需要在每个二维数组中切片 [1, 0] 元素,这是所有二维数组中的 3 并将它们存储在 result 数组中。

NetCDF 示例(切片元素 [500, 400])

import netCDF4

url = "http://eip.ceh.ac.uk/thredds/dodsC/public-chess/PET/aggregation/PETAggregation.ncml"
dataset = netCDF4.Dataset(url)

result = dataset.variables['pet'][:, 500, 400]

myarray 现已被以上内容取代

myarray = np.array([
    [[1, 2], [3, 4], [5, 6]],
    [[1, 2], [3, 4], [5, 6]],
    [[1, 2], [3, 4], [5, 6]],
    [[1, 2], [3, 4], [5, 6]],
])

result = []
for i in myarray:
    result.append(i[1][0])

结果[3, 3, 3, 3]

编辑 FirefoxMetzger 建议用 result = myarray[:, 1, 0]。但是,我收到以下错误消息:

RuntimeError: NetCDF: DAP server error

您提供的最小 numpy 示例可以使用标准切片机制进行有效切片:

myarray = np.array([
    [[1, 2], [3, 4], [5, 6]],
    [[1, 2], [3, 4], [5, 6]],
    [[1, 2], [3, 4], [5, 6]],
    [[1, 2], [3, 4], [5, 6]],
])

result = myarray[:, 1, 0]

NetCFD 似乎是由于生成的切片太大而无法从服务器返回,从而导致崩溃。根据您的评论,这里的解决方案是分块查询服务器并在本地聚合结果。