我有三个V
个整数列表,以及一个3d numpy数组(x[0], y[0], z[0])
,它包含每个点的值。例如,点V[x[0], y[0], z[0]]
的值为plt.scatter(xs, ys, zs, c=V)
。我使用这些来创建三维散点图0.2
。
我想只绘制V
中值至少为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)
变为正确的形状?
编辑:这是一种蛮力的方式:
$(function(){
$("input[name=myList]").on("click",function(){
var uncheck=[];
//console.log("triggered");
//code here to find which ones are unchecked
$boxes = $("input[name=myList]:not(:checked)");
$boxes.each(function(){
// Do stuff with for each unchecked box
uncheck.push($(this).attr('value'))
console.log(uncheck);
});
});
});
答案 0 :(得分:0)
在最好的情况下,数组V
是有序的,当它被展平时,索引i
的值对应i
中的x,y,z
值。如果是这种情况,您可以按条件过滤相应的数组:
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()