如何在元素中考虑NaN的情况下将1-d数组转换为n-d数组?

时间:2018-11-20 10:09:07

标签: python

我有一个类似以下的列表,我想根据当前值中的NaN将这些元素分解为n维。

输入:

[nan 0.1 0.4 0.6 nan 0.8 0.7 0.9 nan 0.3 0.6 0.8]

输出:

[[0.1 0.4 0.6]
 [0.8 0.7 0.9]
 [0.3 0.6 0.8]]

如何实现这一目标

到目前为止,我已经尝试过了

l=[nan 0.1 0.4 0.6 nan 0.8 0.7 0.9 nan 0.3 0.6 0.8]

m_l=[]
t=[]
for val in l:
    if np.isnan(val):
        if len(t)==0:
            continue
        m_l.append(t)
        t=[]
    else:

        t.append(val)
m_l.append(t)

但是我正在寻找改进的解决方案。

1 个答案:

答案 0 :(得分:2)

假设您要使用平方数组,因此每一行都有相同数量的项目:

l=[np.NaN, 0.1, 0.4, 0.6, np.NaN, 0.8, 0.7, 0.9, np.NaN, 0.3, 0.6, 0.8]
m_l2 = np.array(l).reshape((np.isnan(l).sum(),-1))[:,1:]

将输出:

array([[0.1, 0.4, 0.6],
   [0.8, 0.7, 0.9],
   [0.3, 0.6, 0.8]])

将代码分开:

m_l2 = np.array(l) #Convert it to a np array from list
nan_count = np.isnan(l).sum() #Counting the amount of NaN in the array
m_l2 = m_l2.reshape((nan_count,-1)) #Reshaping it according to the amoun of NaNs as rows, with auto infering column count
m_l2 = m_l2[:,1:] #Removing the first column, which is all NaNs