Как обрабатывать значения флага / исключения - PullRequest
0 голосов
/ 25 июня 2019

В Paraview я работаю с набором данных, который использует значение -99999 в качестве значения флага.Я хотел бы иметь возможность манипулировать набором данных без этих значений, вызывающих проблемы с такими вещами, как глифы и цветные полосы.Номинально, я бы хотел, чтобы данные были "проигнорированы".

Немного о данных: у меня есть скалярные и векторные точечные данные, сидящие на фиксированной 2D пространственной сетке с заданными временными интервалами.

Несмотря на то, что -99999 очень далеко от значений, которые в противном случае могли бы показывать данные, использование порогового фильтра не вариант, поскольку флаг может появляться в разных местах в разное время.Работа порогового фильтра Paraview означает, что идентификатор точки для фиксированной точки в пространстве будет меняться по мере изменения количества отфильтрованных точек во времени.

В случае, если это имеет значение, данные находятся в файле netCDF, который считывается через файл заголовка XMF и устройство чтения XDMF, поскольку устройство чтения CF не работает (возможно, из-за моей неструктурированной треугольной сетки).Данные netCDF имеют глобальный атрибут _FillValue, однако Paraview, похоже, не получает их.

1 Ответ

1 голос
/ 28 июня 2019

Вы можете использовать Programmable Filter для замены значений ниже -99999 на NaN. Если данные не являются vtkMultiblockDataSet, вы можете использовать следующий скрипт в программируемом фильтре:

import numpy as np
from vtk.numpy_interface import dataset_adapter as dsa

# name of the array
name = 'name'
# limit
limit = -99999

array = inputs[0].PointData[name].copy()
array[array<=limit] = np.nan
out = dsa.WrapDataObject(self.GetOutput())
out.PointData.append(array, name)

Примечание: если интересующие данные являются данными ячейки, замените PointData на CellData в сценарии.

Примечание 2: скрипт был протестирован на ParaView 5.6.

...