首页 > 解决方案 > 通过第一个非 NaN 元素将矩阵的行向左/向右对齐

问题描述

我有一个矩阵,其中某些行的前导元素是 NaN(每行的前导 NaN 的数量可能不同)。在第一个非 NaN 元素之后,一行中的其他元素也保证为非 NaN。

例子:

A = np.array([[1,2,3],[np.nan,np.nan,1],[np.nan,1,2]])

我想移动每一行,使它们与第一个非 NaN 元素左对齐,如下所示:

B = np.array([[1,2,3],[1,np.nan,np.nan],[1,2,np.nan]])

然后我想执行一些操作(取决于行中的相对索引),例如:

C = B*2

然后将行移回以再次向右对齐:

D = np.array([[2,4,6],[np.nan,np.nan,2],[np.nan,2,4]])

我可以想到一个天真的循环解决方案,它获取每行中第一个非 NaN 元素的位置,然后相应地按行执行移位,但我认为存在更优雅(可能更简单)的解决方案。我愿意使用 pandas 或 numpy 来表示数据及其本机方法/任何 3rd 方实用程序来操作它。执行时间也不是主要问题。

标签: python-3.xpandasnumpy

解决方案


推荐阅读