Сравнение двух значений из двух разных классов ‹class 'pydicom.valuerep.DSfloat'› и ‹class 'numpy.ndarray'› в Python

Я хочу сравнить некоторые значения, используя «if» в приведенном ниже коде, но это не работает:

if Slice_num[person][i, [1]] == Z_pos:   # Slice_num[0][15, [1]] is ['-10.000000'] and Z_pos = -10.000000 
    absname = os.path.join(root, dcmfile)

Пример: значения вышеуказанных переменных равны:

Z_pos: -10.000000 , <class 'pydicom.valuerep.DSfloat'>
Slice_num[person][i, [1]]: ['-10.000000'] , <class 'numpy.ndarray'>

Таким образом, когда код выполняется, ifstatement не может быть применен, а следующая строка после ifstatement не может быть запущена. в то время как значение (-10.000000) одинаково в обоих из них. Как можно решить задачу, чтобы ifstatement нашел их равными?


person Ellie    schedule 16.10.2018    source источник
comment
Предоставьте полную трассировку ошибки и попытайтесь дать минимально воспроизводимый пример (что может быть сложно в данном случае, поскольку здесь задействован некоторый ввод-вывод), чтобы мы могли воспроизвести ошибку и попытаться помочь.   -  person Daniel F    schedule 16.10.2018
comment
Кроме того, старайтесь задавать только один вопрос за раз. Задать два вопроса означает, что вы можете не получить никакого ответа, поскольку кто-то, кто может ответить на одну часть, может не ответить на другую.   -  person Daniel F    schedule 16.10.2018
comment
@Daniel F: Вопрос был изменен.   -  person Ellie    schedule 16.10.2018
comment
Возможный дубликат Идентичные значения с плавающей запятой, сравниваемые как неравные   -  person John Zwinck    schedule 16.10.2018
comment
Ссылка не может решить мою проблему.   -  person Ellie    schedule 16.10.2018


Ответы (1)


На самом деле значения не совпадают. Slice_num[person][i, [1]] — это numpy.ndarray, содержащий один элемент, а именно значение, которое вы хотите сравнить. Попробуйте
Slice_num[person][i, [1]][0] == Z_pos

person g_uint    schedule 16.10.2018
comment
Slice_num[person][i, [1]][0] == Z_pos не работал. Slice_num[person][i, [1]][0] = {str_} -10.000000 и Z_pos = {DSfloat} -10.000000. Это из-за структур данных. - person Ellie; 16.10.2018
comment
Да. поэтому попытка этого предложения дала вам доступ к нужному значению. Теперь примените его к тому типу, который вам подходит :) - person g_uint; 17.10.2018