gpt4 book ai didi

python - 如何通过python沿已知长度的3D向量进行循环

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:06 29 4
gpt4 key购买 nike

我已经在 3D 平面中完成了点过滤程序,但我需要沿着已知长度的已知 3D 法向量进行循环。非常感谢您的帮助。

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

point = sta[10] #starting points
normal = axe[10] #normal vector

d = -point.dot(normal)

# create x,y
xx, yy = np.meshgrid(np.linspace(-3.,-2.,101), np.linspace(-11.,-10.,101))



# calculate corresponding z
z = (-normal[0] * xx - normal[1] * yy - d) * 1. /normal[2]
f=[]
for i in xrange(len(xx)-1):
for j in xrange(len(xx)-1):
if (xx[i][j]-sta[10][0])**2 + (yy[i][j]-sta[10][1])**2 + (z[i][j]-sta[10][2])**2 > float(rad[0])**2:
xx[i][j]=NaN
yy[i][j]=NaN
z[i][j]=NaN

最佳答案

由于您使用的是 meshgrid 和 xxyyz 具有相同的形状,numpy 的广播策略将自动执行您需要的操作.试试这个:

invalid = (xx-sta[10,0])**2 + (yy-sta[10,1])**2 + (z-sta[10,2])**2 > float(rad[0])**2
xx[invalid]=np.NaN
yy[invalid]=np.NaN
z[invalid]=np.NaN

它为满足条件的所有条目创建一个 bool 掩码 invalid,其中包含 True。然后,您可以使用此掩码将相应的值设置为 NaN
请注意,您可以使用元组来索引 numpy 数组。 IE。 myArray[a][b] 等同于 myArray[a, b]

另请注意,我假设您不小心排除了最后的条目。如果你是故意使用 xrange(len(xx)-1) 而不是 xrange(len(xx)),它会变得有点丑陋,你有这样做:

invalid = (xx[:-1,:-1]-sta[10,0])**2 + (yy[:-1,:-1]-sta[10,1])**2 + (z[:-1,:-1]-sta[10,2])**2 > float(rad[0])**2
xx[:-1,:-1][invalid]=np.NaN
yy[:-1,:-1][invalid]=np.NaN
z[:-1,:-1][invalid]=np.NaN

关于python - 如何通过python沿已知长度的3D向量进行循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30706455/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com