【发布时间】:2018-12-03 03:33:53
【问题描述】:
我有一个 3d 数组(三角形数组)。我想获得包含给定点(一维数组)的三角形(二维数组)。 我经历了 in1d, where, argwhere 但我仍然不成功....
例如:
import numpy as np
import numpy.random as rd
t = rd.random_sample((10,3,3))
v0 = np.array([1,2,3])
t[1,2] = v0
t[5,0] = v0
t[8,1] = v0
我想得到:
array([[[[[ 0.87312 , 0.33411403, 0.56808291],
[ 0.36769417, 0.66884858, 0.99675896],
[ 1. , 2. , 3. ]],
[[ 0.31995867, 0.58351034, 0.38731405],
[ 1. , 2. , 3. ],
[ 0.04435288, 0.96613852, 0.83228402]],
[[ 1. , 2. , 3. ],
[ 0.28647107, 0.95755263, 0.5378722 ],
[ 0.73731078, 0.8777235 , 0.75866665]]]])
然后得到v0个相邻点的集合
{[ 0.87312 , 0.33411403, 0.56808291],
[ 0.36769417, 0.66884858, 0.99675896],
[ 0.31995867, 0.58351034, 0.38731405],
[ 0.04435288, 0.96613852, 0.83228402],
[ 0.28647107, 0.95755263, 0.5378722 ],
[ 0.73731078, 0.8777235 , 0.75866665]}
没有循环,数组很大。
例如
In [28]: np.in1d(v0,t[8]).all()
Out[28]: True
可以在一行上进行测试,但我无法通过 all 数组进行测试。 感谢您的帮助。
我的意思是矢量化等价于:
In[54]:[triangle for triangle in t if v0 in triangle ]
Out[54]:
[array([[ 0.87312 , 0.33411403, 0.56808291],
[ 0.36769417, 0.66884858, 0.99675896],
[ 1. , 2. , 3. ]]),
array([[ 0.31995867, 0.58351034, 0.38731405],
[ 1. , 2. , 3. ],
[ 0.04435288, 0.96613852, 0.83228402]]),
array([[ 1. , 2. , 3. ],
[ 0.28647107, 0.95755263, 0.5378722 ],
[ 0.73731078, 0.8777235 , 0.75866665]])]
【问题讨论】:
-
你能分享完整的工作循环代码吗?
-
我的意思是我想要一个矢量化的等价于:
In[5]:[triangle for triangle in t if v0 in triangle ]Out[5]: [array([[ 0.87312 , 0.33411403, 0.56808291], [ 0.36769417, 0.66884858, 0.99675896], [ 1. , 2. , 3. ]]), array([[ 0.31995867, 0.58351034, 0.38731405], [ 1. , 2. , 3. ], [ 0.04435288, 0.96613852, 0.83228402]]), array([[ 1. , 2. , 3. ], [ 0.28647107, 0.95755263, 0.5378722 ], [ 0.73731078, 0.8777235 , 0.75866665]])] -
请编辑问题并将这些代码和预期输出添加到其中。很难读取 cmets。
-
In[5]:[triangle for triangle in t if v0 in triangle ]