Python 从对应于numpy数组的列表中删除元素

Python 从对应于numpy数组的列表中删除元素,python,numpy,matplotlib,Python,Numpy,Matplotlib,我有三个整数列表,以及一个3d numpy数组,其中包含每个点的值。例如,点(x[0],y[0],z[0])的值是V[x[0],y[0],z[0]]。我用这些来创建一个3d散点图plt.scatter(xs,ys,zs,c=V) 我只想在V中绘制值至少为0.2的点。如何从xs、ys、zs中删除正确的元素,并将V变成正确的形状 编辑:以下是一种暴力方式: xg = [] yg = [] zg = [] Vg = [] for x in xs: for y in ys: fo

我有三个整数列表,以及一个3d numpy数组,其中包含每个点的值。例如,点
(x[0],y[0],z[0])
的值是
V[x[0],y[0],z[0]]
。我用这些来创建一个3d散点图
plt.scatter(xs,ys,zs,c=V)

我只想在
V
中绘制值至少为
0.2
的点。如何从
xs、ys、zs
中删除正确的元素,并将
V
变成正确的形状

编辑:以下是一种暴力方式:

xg = []
yg = []
zg = []
Vg = []
for x in xs:
    for y in ys:
        for z in zs:
            if V[x,y,z] > 0.2:
                xg.append(x)
                yg.append(y)
                zg.append(z)
                Vg.append(V[x,y,z])
ax.scatter(xg, yg, zg, c=Vg)

在最佳情况下,数组
V
的排列顺序应确保当其展平时,索引
i
处的值对应于
x,y,z
中的
i
第th个值。如果是这种情况,您可以根据以下条件筛选相应的阵列:

X = np.array(xs); Y = np.array(ys); Z=np.array(zs)
X = X[V>0.2]
Y = Y[V>0.2]
Z = Z[V>0.2]
V = V[V>0.2]

plt.scatter(X,Y,Z, c=V)
如果
x,y,z
实际上没有定义网格,我们需要首先定义该网格

Y,X,Z = np.meshgrid(xs,ys,zs)
X = X[V>0.2]
Y = Y[V>0.2]
Z = Z[V>0.2]
V = V[V>0.2]
ax2.scatter(X, Y, Z, c=V)
一个完整的示例,将问题中的方法与此方法进行比较:

import numpy as np
V = np.arange(27).reshape((3,3,3))/35.
xs = np.arange(3)
ys = np.arange(3)
zs = np.arange(3)


from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(121, projection='3d')
ax2 = fig.add_subplot(122, projection='3d')

# solution from the question
xg = []
yg = []
zg = []
Vg = []
for x in xs:
    for y in ys:
        for z in zs:
            if V[x,y,z] > 0.2:
                xg.append(x)
                yg.append(y)
                zg.append(z)
                Vg.append(V[x,y,z])
ax.scatter(xg, yg, zg, c=Vg)

#  numpy solution
Y,X,Z = np.meshgrid(xs,ys,zs)
X = X[V>0.2]
Y = Y[V>0.2]
Z = Z[V>0.2]
V = V[V>0.2]
ax2.scatter(X, Y, Z, c=V)

plt.show()

您需要添加一些代码。但是
V
不是1d arry afaik。这是一个3d阵列
x
y
z
包含映射到V上的索引。当然,从V中的值顺序的问题来看,这并不清楚。但我们确实知道,因为
plt.scatter(xs,ys,zs,c=V)
在没有过滤的情况下给出了正确的图,所以上述解决方案也应该起作用。