我从栅格计算数组时发现了这个问题:
- 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()
之间的差异是什么?
答案 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个元素来完成此操作,但您可以删除此步骤。