首页 > 解决方案 > 从 for 循环中的二维数组中删除数组

问题描述

我有一个二维数组,它是 xyz 坐标。

array([[ 1. ,  1. ,  1. ],
       [ 2. ,  3. ,  1. ],
       [ 3. ,  4. ,  1. ],
       [ 3.1,  5.1,  1. ],
       [ 3.2,  5.2,  1. ],
       [ 3.4,  5.3,  1. ],
       [ 3.5,  5.4,  1. ],
       [ 3.7,  5.5,  1. ],
       [ 3.8,  5.6,  1. ],
       [ 3.9,  5.7,  1. ],
       [ 4. ,  5.8,  1. ],
       [ 4.1,  5.9,  1. ],
       [ 4.2,  6. ,  1. ],
       [ 5. ,  6.1,  1. ],
       [ 9. ,  6.2,  1. ],
       [10. , 10. ,  1. ]])

当我遍历二维数组时,我想一次删除一个子数组。这样在第一个循环中,第一个子数组将被删除,二维数组将是

array([[ 2. ,  3. ,  1. ],
       [ 3. ,  4. ,  1. ],
       [ 3.1,  5.1,  1. ],
       [ 3.2,  5.2,  1. ],
       [ 3.4,  5.3,  1. ],
       [ 3.5,  5.4,  1. ],
       [ 3.7,  5.5,  1. ],
       [ 3.8,  5.6,  1. ],
       [ 3.9,  5.7,  1. ],
       [ 4. ,  5.8,  1. ],
       [ 4.1,  5.9,  1. ],
       [ 4.2,  6. ,  1. ],
       [ 5. ,  6.1,  1. ],
       [ 9. ,  6.2,  1. ],
       [10. , 10. ,  1. ]])

在第二个循环中,第二个子数组将被删除,二维数组将被

array([[ 1. ,  1. ,  1. ],
       [ 3. ,  4. ,  1. ],
       [ 3.1,  5.1,  1. ],
       [ 3.2,  5.2,  1. ],
       [ 3.4,  5.3,  1. ],
       [ 3.5,  5.4,  1. ],
       [ 3.7,  5.5,  1. ],
       [ 3.8,  5.6,  1. ],
       [ 3.9,  5.7,  1. ],
       [ 4. ,  5.8,  1. ],
       [ 4.1,  5.9,  1. ],
       [ 4.2,  6. ,  1. ],
       [ 5. ,  6.1,  1. ],
       [ 9. ,  6.2,  1. ],
       [10. , 10. ,  1. ]])

等等。

目前我拥有的是以下内容:

xline =[1, 2, 3, 3.1, 3.2, 3.4, 3.5, 3.7, 3.8, 3.9, 4, 4.1, 4.2, 5, 9, 10]
yline =[1, 3, 4, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6,5.7, 5.8, 5.9, 6, 6.1, 6.2, 10]
zline =[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

df = DataFrame(xline,columns=['x_value'])
df['y_value']=yline
df['z_value']=zline

points=df.values

for p1 in points:
    points2=points[:]
    points3=np.delete(points2, np.argwhere(points2 == p1))
    print(points3)

但我的代码似乎将二维数组减少为一维数组。有谁知道如何解决这一问题?

非常感谢您的支持和帮助。

真挚地

威尔逊

标签: pythonnumpyfor-loopmultidimensional-array

解决方案


这可以使用列表索引和连接来完成。我将在这里使用一个不同的(较短的)列表来演示,否则它会太长。

假设我们有一个列表

L = [1,2,3,4,5,6,7]

我们想完全按照您的要求做。然后我们可以做

for i in range(0, len(L)):
    new_L = L[0:i] + L[i+1:len(L)]
    print(new_L)    

输出:

[2, 3, 4, 5, 6, 7]
[1, 3, 4, 5, 6, 7]
[1, 2, 4, 5, 6, 7]
[1, 2, 3, 5, 6, 7]
[1, 2, 3, 4, 6, 7]
[1, 2, 3, 4, 5, 7]
[1, 2, 3, 4, 5, 6]

i您可以创建一个没有th 元素的新列表,而不是从列表中删除。相同的代码也应该适用于 numpy 数组。

旁注:如果您只是想创建一个给定的坐标列表xline, yline, 和zline,使用 Python 的列表推导可能更容易:

coords = [[x,y,z] for x,y,z in zip(xline,yline,zline)]

这将返回一个列表形式为

coords =     [  [x1, y1, z1],
                [x2, y2, z2],
                [x3, y2, z3],
                    ...
   
              ]

推荐阅读