Python 使用列表理解替换m x n数组中的元素

Python 使用列表理解替换m x n数组中的元素,python,arrays,python-2.7,list-comprehension,Python,Arrays,Python 2.7,List Comprehension,我有一个数组: a = array([[1,2,3,1], [2,5,3,1], [0,0,0,0], [5,3,2,5]]) 我希望根据每行(0或1)中的最后一项遍历数组。如果每行中的最后一项为0,我想将该行中的其他3项(仅)更改为np.nan 例如: a = array([[1,2,3,1], [2,5,3,1], [nan, nan, nan, 0], [5,3,2,5]]) 我可以使用for循环来实现这一点。i、 e: for frames in range(len(a)):

我有一个数组:

a = array([[1,2,3,1], [2,5,3,1], [0,0,0,0], [5,3,2,5]])
我希望根据每行(0或1)中的最后一项遍历数组。如果每行中的最后一项为0,我想将该行中的其他3项(仅)更改为np.nan

例如:

a = array([[1,2,3,1], [2,5,3,1], [nan, nan, nan, 0], [5,3,2,5]])
我可以使用for循环来实现这一点。i、 e:

for frames in range(len(a)):
    if a[frames][3] == 0:
        a[frames][0:2] = np.nan
有没有更有效的方法使用列表理解来实现这一点?到目前为止,我只想到了这一点,但我觉得这可能会更有效率:

a = np.array([[np.nan, np.nan, np.nan] if frames[3] == 0 else frames[0:3] for frames in a])
因为这将创建一个数组数组,并裁剪最后一列


提前谢谢

IIUC,您不需要列表理解。使用


如果您有这些数组的dict,只需为每个数组编制索引即可

for a in data.values():
    a[a[:,-1] == 0, 0:3] = np.nan

顺便说一句,如果这个数组是字典的一部分,你能在字典外部使用相同的索引吗?e、 g.数据={a=np.数组([[1,2,2,3,3,3,3,3,3,3,3,1,[0,0,0,0,0 0,0,0,0,0[0[1,4,4,7,7,1[1,4,7,7,7,1][3.g.数据={a.0,0,0,0,0,0,0,0,0,[2,7,7,1[3,7,1[3,7,1]]]]],[2.b.数组([a=a=np.数组([[[2,2,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,[[[[5,2,3,1]]}?@NevPires是的。。只需迭代并索引每个值感谢您的帮助!还有一个问题,将数据类型更改为float有什么作用?@NevPires只是,如果数据类型是整数,则在尝试分配
np.nan
时可能会引发异常。对它来说,哪一个是浮点数
for a in data.values():
    a[a[:,-1] == 0, 0:3] = np.nan