首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >连接具有部分空子列表的数组嵌套列表

连接具有部分空子列表的数组嵌套列表
EN

Stack Overflow用户
提问于 2021-11-21 14:44:00
回答 1查看 51关注 0票数 0

目标是连接嵌套的数组列表(即list_arr)。但是,list_arr中的一些子列表的长度为零。

仅在list_arr上使用np.arraynp.asarray不会产生预期的结果。

代码语言:javascript
运行
复制
import numpy as np

ncondition=2
nnodes=30
nsbj=6


np.random.seed(0)

# Example of nested list list_arr

list_arr=[[[np.concatenate([[idx_sbj],[ncondi],[nepoch] ,np.random.rand(nnodes)]) for nepoch in range(np.random.randint(5))] \
 for ncondi in range(ncondition)] for idx_sbj in range(nsbj)]

以下代码不会生成预期的串联输出

代码语言:javascript
运行
复制
test1=np.asarray(list_arr)
test2=np.array(list_arr)
test3= np.vstack(list_arr)

预期输出是形状数组(15,33)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-21 18:03:47

好吧,我的好奇心占了上风。

从列表中创建一个对象数据类型数组:

代码语言:javascript
运行
复制
In [280]: arr=np.array(list_arr,object)
In [281]: arr.shape
Out[281]: (6, 2)

此数组的所有元素都是列表,带有len:

代码语言:javascript
运行
复制
In [282]: np.frompyfunc(len,1,1)(arr)
Out[282]: 
array([[4, 1],
       [0, 2],
       [0, 2],
       [0, 0],
       [2, 3],
       [1, 0]], dtype=object)

查看特定的子列表。一个有两个空列表

代码语言:javascript
运行
复制
In [283]: list_arr[3]
Out[283]: [[], []]

其他人有一个空列表,第一个或第二个:

代码语言:javascript
运行
复制
In [284]: list_arr[-1]
Out[284]: 
[[array([5.        , 0.        , 0.        , 0.3681024 , 0.3127533 ,
         0.80183615, 0.07044719, 0.68357296, 0.38072924, 0.63393096,
         ...])],
 []]

还有一些包含不同数量的数组的列表:

如果我将282中的数字相加,我得到15,所以这一定是你得到(15,33)的地方。大概所有的数组都有相同的长度。

外层的嵌套是不相关的,所以我们可以拆分并移除它。

代码语言:javascript
运行
复制
In [295]: alist = arr.ravel().tolist()

然后过滤掉空列表,并对其余列表应用vstack

代码语言:javascript
运行
复制
In [296]: alist = [np.vstack(x) for x in alist if x]
In [297]: len(alist)
Out[297]: 7

和另一个vstack来加入这些:

代码语言:javascript
运行
复制
In [298]: arr2 = np.vstack(alist)
In [299]: arr2.shape
Out[299]: (15, 33)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70055553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档