追加到嵌套的NumPy数组

时间:2019-12-30 20:12:54

标签: python arrays numpy nested

我有一个NumPy数组的列表:

self.xy_lat_lon_list = [array([3986139.12431615, 3889959.08475953]),
                        array([3987252.31922408, 3889959.08475953]),
                        array([3988365.51413201, 3889959.08475953]),
                        array([3989478.70903994, 3889959.08475953]),
                        array([3990591.90394788, 3889959.08475953]),
                        array([3991705.09885581, 3889959.08475953]),
                        array([3992818.29376374, 3889959.08475953]),....]

我需要向每个数组(同一数组)附加一个整数 例如:

uav_elev = 1900

输出:

self.xy_lat_lon_list = [array([3986139.12431615, 3889959.08475953,1900]),
                        array([3987252.31922408, 3889959.08475953,1900]),
                        array([3988365.51413201, 3889959.08475953,1900]),
                        array([3989478.70903994, 3889959.08475953,1900]),
                        array([3990591.90394788, 3889959.08475953,1900]),
                        array([3991705.09885581, 3889959.08475953,1900]),
                        array([3992818.29376374, 3889959.08475953,1900]),....]

我尝试使用列表理解,但是迷失在某个地方。

在常规的for循环中:

for l in self.xy_lat_lon_list:
    l. # I thought that I will get append or insert here but It's not. 

2 个答案:

答案 0 :(得分:1)

列出您的名单:

In [107]: alist = [np.array([3986139.12431615, 3889959.08475953]), 
     ...:                         np.array([3987252.31922408, 3889959.08475953])
     ...: , 
     ...:                         np.array([3988365.51413201, 3889959.08475953])
     ...: , 
     ...:                         np.array([3989478.70903994, 3889959.08475953])
     ...: ] 
     ...:                                                                       
In [108]: alist                                                                 
Out[108]: 
[array([3986139.12431615, 3889959.08475953]),
 array([3987252.31922408, 3889959.08475953]),
 array([3988365.51413201, 3889959.08475953]),
 array([3989478.70903994, 3889959.08475953])]

分别将值添加到每个数组:

In [109]: [np.concatenate((arr, [1900]),axis=0) for arr in alist]               
Out[109]: 
[array([3.98613912e+06, 3.88995908e+06, 1.90000000e+03]),
 array([3.98725232e+06, 3.88995908e+06, 1.90000000e+03]),
 array([3.98836551e+06, 3.88995908e+06, 1.90000000e+03]),
 array([3.98947871e+06, 3.88995908e+06, 1.90000000e+03])]

np.append也可以在这里工作。这只是调用concatenate的另一种方法。

或者您可以将这些数组合并为一个2d数组(只要它们的大小相同):

In [110]: arr = np.vstack(alist)                                                
In [111]: arr                                                                   
Out[111]: 
array([[3986139.12431615, 3889959.08475953],
       [3987252.31922408, 3889959.08475953],
       [3988365.51413201, 3889959.08475953],
       [3989478.70903994, 3889959.08475953]])

并连接一个垂直的值列:

In [112]: np.concatenate((arr, np.ones((4,1))*1900), axis=1)                    
Out[112]: 
array([[3.98613912e+06, 3.88995908e+06, 1.90000000e+03],
       [3.98725232e+06, 3.88995908e+06, 1.90000000e+03],
       [3.98836551e+06, 3.88995908e+06, 1.90000000e+03],
       [3.98947871e+06, 3.88995908e+06, 1.90000000e+03]])

答案 1 :(得分:0)

insert函数可以完全满足您的要求:

np.insert(self.xy_lat_lon_list, 2, uav_elev, axis=1)

尽管它返回2D数组,所以如果您需要将其转换回1D数组列表,只需在其上应用list()函数。