我有一个类似以下的列表,我想根据当前值中的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)
但是我正在寻找改进的解决方案。
答案 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