【发布时间】:2021-03-03 14:51:00
【问题描述】:
我有一个二维数组,它是 x y z 坐标。
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)
但我的代码似乎将二维数组简化为一维数组。有谁知道如何解决这个问题?
非常感谢您的支持和帮助。
真诚的
威尔逊
【问题讨论】:
-
你看
np.argwhere(points2 == p1)了吗?这是否符合np.delete的要求?练习使用带有简单数字的np.delete,这样您就可以清楚地了解它的作用。换句话说,采取小步骤,确保每个步骤都按照您的意愿行事,并且您了解原因。 -
尝试先选择所有要删除的行,然后只做一个
delete。循环中的重复删除会更慢。
标签: python numpy for-loop multidimensional-array