Simpler code to combine multiple lists into one array? I actually wish “lists” are still “lists” in that array
我有一个类似于这个和那个的问题,但是解决这些问题的方法是所有的列表都是"统一的",缺乏"差异化"。
我的python代码如下:
1 2 3 4 5 6 7 8 9 | y = np.empty([1,len(test)]) count = -1 for feature in test : N = engine.neighbours(np.asarray(feature)) if len(N) != 4096: print"error" continue count = count + 1 y [count] = engine.neighbours(np.asarray(feature)) |
我只是想知道是否有任何简化的代码来完成这项工作?
链接的问题与扁平化列表有关。在您的代码中,您正在处理一个列表列表(我猜是这样),过滤掉一些列表,并将其余的列表收集到一个二维数组中。
哎呀!
1 2 3 4 5 6 7 8 9 10 11 12 | y = np.empty([1,len(test)]) count = -1 # I would prefer to start with 0, but thats a style issue for feature in test : N = engine.neighbours(np.asarray(feature)) # so engine.neighbors requires an array; and returns an array? if len(N) != 4096: print"error" continue count = count + 1 y [count] = engine.neighbours(np.asarray(feature)) # why call neighbors again? why not reuse N? |
增量创建数组的一种常见方法是:
1 2 3 4 5 6 | alist = [] for feature in tests: N = engine.neighbors(np.array(feature) # test N length alist.append(N) y = np.array(alist) |
由于通过长度测试,所有
将
将
1 | y = np.concatenate([y, N[None,:]], axis=0) |
连接是显式的,并且所需的维度操作是清晰的。
要创建一个一维数组,必须执行如下操作:
1 2 3 | y=np.empty((4,),dtype=object) for i in range(len(y)): y[i]=np.arange(i,2*i) |
生产:
1 | array([array([], dtype=int32), array([1]), array([2, 3]), array([3, 4, 5])], dtype=object) |
可以说,这比由
1 2 3 | y=[] for i in range(4): y.append(np.arange(i,2*i)) |
在这一切中,我假设