将列添加到2D列表

时间:2017-02-01 21:40:42

标签: python python-3.x numpy concatenation

我有一个像

这样的数组的2D列表
  array( [ 988,  389],
         [ 986,  389],
         [ 985,  388],
         [ 977,  388],
         [ 976,  387]], dtype=int32)

和另一个清单

 array( [ 149.68299837],
        [ 149.25481567],
        [ 150.029997  ],
        [ 148.63714206],
        [ 149.48244044]])

我尝试使用

连接这两个列表
  trail = list(map(list,zip(two_d_array,concat)))
  trail = np.vstack(trail)

这给了我

  array([array([988, 389], dtype=int32), array([ 149.68299837])],
        [array([986, 389], dtype=int32), array([ 149.25481567])],
        [array([985, 388], dtype=int32), array([ 150.029997])],
        [array([977, 388], dtype=int32), array([ 148.63714206])],
        [array([976, 387], dtype=int32), array([ 149.48244044])]], dtype=object)

如何删除所有数组和dtype,只显示

之类的数字
     [ 988,  389,149.68299837],
     [ 986,  389,149.25481567],
     [ 985,  388, 150.029997],
     [ 977,  388,148.63714206],
     [ 976,  387,149.48244044]

2 个答案:

答案 0 :(得分:0)

要对你的两个数组执行copy-n-paste,我必须在开始时使用[结果是2个2d数组

In [165]: twod.shape
Out[165]: (5, 2)
In [166]: oned.shape
Out[166]: (5, 1)

一个简单的连接工作

In [164]: np.concatenate((twod, oned),axis=1)
Out[164]: 
array([[ 988.        ,  389.        ,  149.68299837],
       [ 986.        ,  389.        ,  149.25481567],
       [ 985.        ,  388.        ,  150.029997  ],
       [ 977.        ,  388.        ,  148.63714206],
       [ 976.        ,  387.        ,  149.48244044]])

请注意,现在一切都是浮动的。

您的列表地图calc会生成如下列表:

[[array([988, 389]), array([ 149.68299837])],
 [array([986, 389]), array([ 149.25481567])],
 [array([985, 388]), array([ 150.029997])],
 ....

包含2个不同长度数组的子列表。用hstack替换列表会生成一个可以被vstacked的列表

In [173]: temp = list(map(np.hstack, zip(twod, oned.ravel())))
In [174]: temp
Out[174]: 
[array([ 988.        ,  389.        ,  149.68299837]),
 array([ 986.        ,  389.        ,  149.25481567]),
 array([ 985.      ,  388.      ,  150.029997]),
....

答案 1 :(得分:0)

我喜欢np.c_和np.column_stack(@Divakar建议),因为我对时间关注不多,但我更感兴趣的是它在视觉上“看起来”的理解目的......

-(void)sendError:(NSString*)message{
    _errorMessage.stringValue = message;
    _errorGeneration++;
    NSUInteger capturedGeneration = _errorGeneration;
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        if (_errorGeneration == capturedGeneration)
            _errorMessage.stringValue = @"";
    });
}

阵列a和b很明显。我只需要记住做np.c_方括号(np.c_ [stack these],当然,逐列堆栈对我来说也是有意义的。