Создание сферической маски из массива и получение индексов массива внутри сферы - PullRequest
0 голосов
/ 16 октября 2018

Привет У меня есть пример данных для позиций x, y, z:

# x y z
-0.120932 -0.300053 -0.296206
-0.0978073 -0.304533 -0.291415
-0.097738 -0.299779 -0.28466
-0.118981 -0.293157 -0.292577
-0.105695 -0.263689 -0.303431
-0.0759291 -0.254051 -0.294597
-0.0637251 -0.293032 -0.306507
-0.083585 -0.290494 -0.311816
-0.0928098 -0.294645 -0.294957

Я хотел бы создать сферу из 5 единиц, а затем применить сферическую маску, чтобы получить координаты позиции только внутри этой сферы,Я также хотел бы получить индексы соответствующих строк (координат), которые попадают в сферу.

Мой код выглядит следующим образом:

pos = 'data.txt'

x, y, z = np.loadtxt(pos, unpack =True)


h = len(x)
w = len(y)
l = len(z)
center = [-0.120932, -0.300053, -0.296206]
radius = 5.


# create circular mask 
def createCircularMask(h, w, l, center, radius):

    X, Y, Z = np.ogrid[:h, :w, :l]
        dist_from_center = np.sqrt((X - center[0])**2 + (Y-center[1])**2 + (Z-center[2]**2))

        mask = dist_from_center <= radius
        return mask

inside_x = x[createCircularMask]

print inside_x
print len(inside_x)

Я получаю следующую ошибку:

   File "density_map_test.py", line 41, in <module>
    inside_x = x[createCircularMask]
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

Не могли бы вы уточнить, почему я получаю это?а также Как я получаю индексы тоже.Заранее спасибо

1 Ответ

0 голосов
/ 09 мая 2019

В дополнение к Andras Deak answer У вас есть опечатка в вашей функции при расчете расстояния Для координаты Z:

dist_from_center = np.sqrt((X - center[0])**2 + (Y-center[1])**2 + (Z-center[2]**2))

fixed:

dist_from_center = np.sqrt((X - center)**2 + (Y-center)**2 + (Z-center)**2)

у меня все отлично работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...