从被移除的3D数组中删除行

2024-05-16 10:56:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我处理的雷达反射率数据有这种形状,我的最终目标是绘制它,但在此之前,我有这个问题-

(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)

但这似乎不起作用。该元素似乎未被删除。我哪里出错了?你知道吗


Tags: 数据numpy高度np绘制条目形状arr
2条回答

在您的示例中,indx等于(0,0,0)

In [12]: indx
Out[12]: (array([0]), array([0]), array([0]))

所以呢np.删除删除了原始数组的第一个元素,然后返回扁平副本(1D副本),因为axisnp.delete参数为零。你知道吗

正如sciroccorics所解释的,修剪轴元素的最佳方法是使用索引数组来屏蔽它们。你知道吗

这是你想要的,还是我误解了你的问题?你知道吗

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]

相关问题 更多 >