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

标签 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 循环来做到这一点。即:

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,您不需要列表理解。使用 indexing

>>> a = np.array([[1,2,3,1], [2,5,3,1], [0,0,0,0], [5,3,2,5]], dtype=float)
>>> a[a[:,-1] == 0, 0:3] = np.nan

array([[  1.,   2.,   3.,   1.],
       [  2.,   5.,   3.,   1.],
       [ nan,  nan,  nan,   0.],
       [  5.,   3.,   2.,   5.]])

如果你有这些数组的字典,只需索引它们中的每一个

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

关于python - 使用列表理解替换 m x n 数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51885861/

相关文章:

c++ - 如何在类中有一个二维数组作为私有(private)变量,然后在构造函数中设置

python - 国际化单位系统

Python:从有序列表中删除不在无序列表中的条目

java - 如何从串行端口读取文本?

Python 和 Pip 不同步

python - 如何忽略一组字符直到遇到正则表达式中的指定字符?

python - 理解 python 中的 cmp 和递归

Python argparse REMAINDER 不清楚

python - 如何找出哪一行代码使文件保持打开状态?

c - 如何在 C 中退出后返回变量