我正在处理具有这种形状的雷达反射率数据,我的最终目标是绘制它但在此之前我有这个问题 -
(2500,50,200) #(scans, rays, altitude)
我还有三个与纬度,经度和海拔相对应的3D numpy数组,其形状与雷达反射率相同,即
(2500,50,200)
大量数据由零组成。所以我认为在绘制它们之前删除与零相对应的条目是有意义的。删除由零组成的反射率数据中的条目后,我还需要返回并删除纬度,经度和高度数组中的相应条目。
以下是对玩具示例的尝试
import numpy as np
arr=np.arange(27).reshape((3,3,3))
arrNZ = arr[np.nonzero(arr)]
print(arr.shape,arrNZ)
indx = np.where(arr == 0)
arr1 = np.arange(27).reshape((3,3,3))
n_arr1 = np.delete(arr1,indx)
print(n_arr1.shape)
但这似乎不起作用。该元素似乎未被删除。我哪里错了?
答案 0 :(得分:2)
这是你想要的,还是我误解了你的问题?
import numpy as np
ref = np.array([1,0,3,4,0,6,7,8,9]).reshape(3,3) # reflectivity
lat = np.arange(9).reshape(3,3) # latitude
print("ref =\n", ref)
print("lat =\n", lat)
ref2 = ref[np.nonzero(ref)] # keep only non-zero
lat2 = lat[np.nonzero(ref)] # keep the items where 'ref' is non-zero
print("ref2 =", ref2)
print("lat2 =", lat2)
结果:
ref =
[[1 0 3]
[4 0 6]
[7 8 9]]
lat =
[[0 1 2]
[3 4 5]
[6 7 8]]
ref2 = [1 3 4 6 7 8 9]
lat2 = [0 2 3 5 6 7 8]
答案 1 :(得分:1)
在您的示例中,indx等于(0,0,0)
In [12]: indx
Out[12]: (array([0]), array([0]), array([0]))
因此,np.delete删除了原始数组的第一个元素,然后返回了一个展平的副本(一维副本),因为axis
的{{1}}参数为零。
正如sciroccorics所解释的那样,修剪轴元素的最佳方法是使用索引数组来屏蔽它们。