Python 'nan' при удалении массива из объекта типа данных - PullRequest
0 голосов
/ 23 апреля 2020

Я работаю над проектом, в котором я хочу прочитать бинарный файл STL. Я скопировал части чьего-то открытого исходного кода и без проблем. Однако теперь мне нужно манипулировать этими данными, и когда я извлекаю массив векторов нормалей из объекта типа данных, в котором хранятся данные треугольника, я получаю nans.

Объект типа данных структурируется следующим образом:

triangle_data = np.dtype([
    ('normals', np.float32, (3, )),
    ('v0', np.float32, (3, )),
    ('v1', np.float32, (3, )),
    ('v2', np.float32, (3, )),
    ('attr', 'u2', (1, )),
])

И раздел, который создает nans, находится здесь:

def identify_surfaces(self):
        tri_list = self.triangle_data
        #This print has the correct data, no nans!
        print(tri_list)
        for n in range(len(tri_list)):
            surface_list = []
            normal_vec = tri_list[n]['normals']
            #this print is filled with nans Q_Q
            print(normal_vec)

Я подозреваю, что это как-то связано с типом данных float32 в объекте типа данных, но я не уверен как решить это. Недопустимо отклонять данные, содержащие nans, и данные nan могут принимать значения 0, 1 или -1.

Спасибо за понимание!

Вот вывод print ( tri_list)

[([-1.0000000e+00,  0.0000000e+00,  0.0000000e+00], [ 0.0000000e+00,  0.0000000e+00,  5.0799999e+01], [ 0.0000000e+00,  5.0799999e+01,  0.0000000e+00], [ 0.0000000e+00,  0.0000000e+00,  0.0000000e+00], [0])
([ 0.0000000e+00,  0.0000000e+00, -1.0000000e+00], [ 0.0000000e+00,  5.0799999e+01,  0.0000000e+00], [ 1.5240001e+02,  0.0000000e+00,  0.0000000e+00], [ 0.0000000e+00,  0.0000000e+00,  0.0000000e+00], [0])
([ 0.0000000e+00, -1.0000000e+00,  0.0000000e+00], [ 1.5240001e+02,  0.0000000e+00,  0.0000000e+00], [ 1.5240001e+02,  0.0000000e+00,  5.0799999e+01], [ 0.0000000e+00,  0.0000000e+00,  0.0000000e+00], [0])
([-0.0000000e+00, -1.0000000e+00,  0.0000000e+00], [ 1.5240001e+02,  0.0000000e+00,  5.0799999e+01], [ 0.0000000e+00,  0.0000000e+00,  5.0799999e+01], [ 0.0000000e+00,  0.0000000e+00,  0.0000000e+00], [0])
([ 1.0000000e+00,  0.0000000e+00, -0.0000000e+00], [ 1.5240001e+02,  5.0799999e+01,  0.0000000e+00], [ 1.5240001e+02,  5.0799999e+01,  5.0799999e+01], [ 1.5240001e+02,  0.0000000e+00,  0.0000000e+00], [0])
([ 1.0000000e+00,  0.0000000e+00,  0.0000000e+00], [ 1.5240001e+02,  5.0799999e+01,  5.0799999e+01], [ 1.5240001e+02,  0.0000000e+00,  5.0799999e+01], [ 1.5240001e+02,  0.0000000e+00,  0.0000000e+00], [0])
([-3.7314969e-32, -1.1194490e-31, -1.0000000e+00], [ 0.0000000e+00,  5.0799999e+01,  0.0000000e+00], [ 5.0799999e+01,  5.0799999e+01, -1.8956003e-30], [ 1.5240001e+02,  0.0000000e+00,  0.0000000e+00], [0])
([ 0.0000000e+00,  0.0000000e+00, -1.0000000e+00], [ 1.0160000e+02,  5.0799999e+01,  0.0000000e+00], [ 1.5240001e+02,  5.0799999e+01,  0.0000000e+00], [ 1.5240001e+02,  0.0000000e+00,  0.0000000e+00], [0])
([ 3.7314969e-32,  3.7314972e-32, -1.0000000e+00], [ 5.0799999e+01,  5.0799999e+01, -1.8956003e-30], [ 1.0160000e+02,  5.0799999e+01,  0.0000000e+00], [ 1.5240001e+02,  0.0000000e+00,  0.0000000e+00], [0])
([-1.0000000e+00, -0.0000000e+00, -0.0000000e+00], [ 0.0000000e+00,  5.0799999e+01,  5.0799999e+01], [ 0.0000000e+00,  5.0799999e+01,  0.0000000e+00], [ 0.0000000e+00,  0.0000000e+00,  5.0799999e+01], [0])
([ 0.0000000e+00, -0.0000000e+00,  1.0000000e+00], [ 1.5240001e+02,  0.0000000e+00,  5.0799999e+01], [ 1.5240001e+02,  5.0799999e+01,  5.0799999e+01], [ 0.0000000e+00,  0.0000000e+00,  5.0799999e+01], [0])
([ 0.0000000e+00,  0.0000000e+00,  1.0000000e+00], [ 1.5240001e+02,  5.0799999e+01,  5.0799999e+01], [ 1.0160000e+02,  5.0799999e+01,  5.0799999e+01], [ 0.0000000e+00,  0.0000000e+00,  5.0799999e+01], [0])
([ 0.0000000e+00,  0.0000000e+00,  1.0000000e+00], [ 5.0799999e+01,  5.0799999e+01,  5.0799999e+01], [ 0.0000000e+00,  5.0799999e+01,  5.0799999e+01], [ 0.0000000e+00,  0.0000000e+00,  5.0799999e+01], [0])
([ 0.0000000e+00,  0.0000000e+00,  1.0000000e+00], [ 1.0160000e+02,  5.0799999e+01,  5.0799999e+01], [ 5.0799999e+01,  5.0799999e+01,  5.0799999e+01], [ 0.0000000e+00,  0.0000000e+00,  5.0799999e+01], [0])
([-1.0000000e+00,  0.0000000e+00,  0.0000000e+00], [ 5.0799999e+01,  5.0799999e+01,  5.0799999e+01], [ 5.0799999e+01,  1.0160000e+02,  0.0000000e+00], [ 5.0799999e+01,  5.0799999e+01, -1.8956003e-30], [0])
([ 0.0000000e+00,  1.0000000e+00,  0.0000000e+00], [ 0.0000000e+00,  5.0799999e+01,  5.0799999e+01], [ 5.0799999e+01,  5.0799999e+01, -1.8956003e-30], [ 0.0000000e+00,  5.0799999e+01,  0.0000000e+00], [0])
([-0.0000000e+00,  1.0000000e+00,  0.0000000e+00], [ 0.0000000e+00,  5.0799999e+01,  5.0799999e+01], [ 5.0799999e+01,  5.0799999e+01,  5.0799999e+01], [ 5.0799999e+01,  5.0799999e+01, -1.8956003e-30], [0])
([ 3.7314969e-32,  0.0000000e+00, -1.0000000e+00], [ 1.0160000e+02,  1.0160000e+02,  0.0000000e+00], [ 1.0160000e+02,  5.0799999e+01,  0.0000000e+00], [ 5.0799999e+01,  5.0799999e+01, -1.8956003e-30], [0])
([ 0.0000000e+00,  3.7314969e-32, -1.0000000e+00], [ 5.0799999e+01,  1.0160000e+02,  0.0000000e+00], [ 1.0160000e+02,  1.0160000e+02,  0.0000000e+00], [ 5.0799999e+01,  5.0799999e+01, -1.8956003e-30], [0])
([ 0.0000000e+00,  1.0000000e+00,  0.0000000e+00], [ 1.0160000e+02,  5.0799999e+01,  5.0799999e+01], [ 1.5240001e+02,  5.0799999e+01,  0.0000000e+00], [ 1.0160000e+02,  5.0799999e+01,  0.0000000e+00], [0])
([ 1.0000000e+00,  0.0000000e+00, -0.0000000e+00], [ 1.0160000e+02,  1.0160000e+02,  0.0000000e+00], [ 1.0160000e+02,  1.0160000e+02,  5.0799999e+01], [ 1.0160000e+02,  5.0799999e+01,  0.0000000e+00], [0])
([ 1.0000000e+00,  0.0000000e+00,  0.0000000e+00], [ 1.0160000e+02,  1.0160000e+02,  5.0799999e+01], [ 1.0160000e+02,  5.0799999e+01,  5.0799999e+01], [ 1.0160000e+02,  5.0799999e+01,  0.0000000e+00], [0])
([-0.0000000e+00,  1.0000000e+00,  0.0000000e+00], [ 1.0160000e+02,  5.0799999e+01,  5.0799999e+01], [ 1.5240001e+02,  5.0799999e+01,  5.0799999e+01], [ 1.5240001e+02,  5.0799999e+01,  0.0000000e+00], [0])
([ 0.0000000e+00,  0.0000000e+00,  1.0000000e+00], [ 1.0160000e+02,  5.0799999e+01,  5.0799999e+01], [ 5.0799999e+01,  1.0160000e+02,  5.0799999e+01], [ 5.0799999e+01,  5.0799999e+01,  5.0799999e+01], [0])
([-1.0000000e+00, -0.0000000e+00, -0.0000000e+00], [ 5.0799999e+01,  1.0160000e+02,  5.0799999e+01], [ 5.0799999e+01,  1.0160000e+02,  0.0000000e+00], [ 5.0799999e+01,  5.0799999e+01,  5.0799999e+01], [0])
([ 0.0000000e+00,  0.0000000e+00,  1.0000000e+00], [ 1.0160000e+02,  1.0160000e+02,  5.0799999e+01], [ 5.0799999e+01,  1.0160000e+02,  5.0799999e+01], [ 1.0160000e+02,  5.0799999e+01,  5.0799999e+01], [0])
([ 0.0000000e+00,  1.0000000e+00,  0.0000000e+00], [ 5.0799999e+01,  1.0160000e+02,  5.0799999e+01], [ 1.0160000e+02,  1.0160000e+02,  0.0000000e+00], [ 5.0799999e+01,  1.0160000e+02,  0.0000000e+00], [0])
([-0.0000000e+00,  1.0000000e+00,  0.0000000e+00], [ 5.0799999e+01,  1.0160000e+02,  5.0799999e+01], [ 1.0160000e+02,  1.0160000e+02,  5.0799999e+01], [ 1.0160000e+02,  1.0160000e+02,  0.0000000e+00], [0])]

Вот вывод tri_list [n]:

tri_list[n]: ([-3.731497e-32, -1.119449e-31,           nan], [ 0. , 50.8,  0. ], [ 5.0799999e+01,  5.0799999e+01, -1.8956003e-30], [152.40001,   0.     ,   0.     ], [0])

Nans появляются только в треугольных «нормальных» векторных данных

...