numpy mean()的返回值是多少?

时间:2017-03-27 14:37:36

标签: python numpy rasterio

我从栅格计算数组时发现了这个问题:

- project:
  -
    categ: navigation
    name: Letterman
    age: 54
    feeling: swell
    thumb: thumb-letterman.jpg
    main:
      - image: image_1.jpeg

- project:
  -
    categ: navigation
    name: Carlin
    age: 67
    feeling: nice
    thumb: thumb-carlin.jpg
    main:
      - image: image_1.jpeg
      - image: image_2.jpeg
      - image: image_3.jpeg

我只想获得包含24个平均值的列表,但是此代码返回了列表,包括arr3d的每一层,其掩码层和平均值。

with rasterio.open(file) as ds:   
    arr3d=ds.read()
    arr3d=np.ma.masked_where(arr3d==-32768,arr3d,False)
    list=[]
    for i in range(0,24):
        tmean=arr3d[i,:,:].mean()  
        list.append(tmean)

但是当我尝试 len(list)=72 时,只重新创建一个没有任何数组的平均值。 arr3d[i,:,:].mean()arr.mean()之间的差异是什么?

1 个答案:

答案 0 :(得分:1)

np.mean()返回:(1)单个值,如果沿着展平数组获取均值或者数组是1维,或者(2)具有沿着每个数均值的均值的数组那些轴。因为这很令人困惑,所以我建议始终将axis参数显式传递给np.mean()函数。如果未传递轴,则采用展平数组的平均值。 .mean()函数也是如此 - 它们实际上是相同的函数。

我建议明确传递你想要计算平均值的轴:

with rio.open(file) as ds:   
    arr3d=ds.read()
    arr3d=np.ma.masked_where(arr3d==-32768,arr3d,False)
    means = np.mean(arr3d, axis=0)

然后means将始终具有与arr3d的第一个轴相同数量的元素。您目前通过手动迭代超过24个元素来完成此操作,但您可以删除此步骤。