如何用Python中的previus数据替换3D矩阵中具有特定值的元素?

2024-04-25 04:49:34 发布

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

我有一个三维矩阵(lon,lat,hight),其中一些元素的值为0。我想用previus级别的数据替换这些值,直到所有的零数据都被替换。这意味着,如果‘a’是矩阵[i,j,k],那么我想用[i,j,k-1]替换其中的零值,如果之前的值再次为零,它将接受previus数据,直到它得到值。我试过下面的代码,但它给出了错误,无论我做什么结果是没有意义的。LW是nc文件。你知道吗

LW = S.netcdf_file('/path','r')
a = LW.variables['nflx'][:,:,:]
lona = LW.variables['lon'][:]
lata = LW.variables['lat'][:]

M = np.zeros([96,73,25])
for i in xrange(0, 96):
  for j in xrange(0, 73):
    for k in xrange(0,25):
        while a==0:
           M = a[:,:,k-1]

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

有人知道吗?感谢所有的帮助。你知道吗


Tags: 数据代码in元素for矩阵variables级别
1条回答
网友
1楼 · 发布于 2024-04-25 04:49:34

这里有一个简单而动态的方法。每个子阵M[i,j]都将作为循环处理。如果第一个值为零,它将被最后一个值替换。你知道吗

>>> M = np.arange(20)
... M[[6,11,12,19]] = 0
... M = M.reshape((2,2,5))
... print(M)
[[[ 0  1  2  3  4]
  [ 5  0  7  8  9]]

 [[10  0  0 13 14]
  [15 16 17 18  0]]]
>>> for i in np.ndindex(M.shape[:-1]):
...     while 0 in M[i]:
...         args = np.argwhere(M[i]==0)
...         M[i][args] = M[i][args-1]
... print(M)
[[[ 4  1  2  3  4]
  [ 5  5  7  8  9]]

 [[10 10 10 13 14]
  [15 16 17 18 18]]]

相关问题 更多 >