代码之家  ›  专栏  ›  技术社区  ›  Mohamed Thasin ah

考虑元素中的NaN,如何将一维数组转换为N-D数组?

  •  1
  • Mohamed Thasin ah  · 技术社区  · 6 年前

    我有一个如下的列表,我想根据当前值中的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 回复  |  直到 6 年前
        1
  •  2
  •   Dinari    6 年前

    假设您需要一个平方数组,因此每行具有相同数量的项:

    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