Как я могу создать один массив функций numpy из двух массивов и одно значение float?

Я пытаюсь создать файл данных тренировки, который структурирован следующим образом:

[Строки = Образцы, Столбцы = функции]

Поэтому, если у меня есть 100 образцов и 2 объекта, то форма моего np.array будет (100,2) и т. Д.

Данные

В приведенном ниже списке содержатся строки пути к файлам патчей-данных .nrrd 3D sample, которые были обработаны с использованием метода 01.

['/Users/FK/Documents/image/01/subject1F_200.nrrd', '/Users/FK/Documents/image/01/subject2F_201.nrrd'] 

Позволяет вызвать каталог dir_01. Для целей тестирования можно использовать следующий трехмерный патч. Он имеет ту же форму, что и файл .nrrd при чтении:

 subject1F_200_PP01 = np.random.rand(128,128, 128) subject1F_201_PP01 = np.random.rand(128,128, 128) # and so on... 

В приведенном ниже списке содержатся строки пути к файлам патча-данных 3D-образца .nrrd 3D, которые были обработаны с использованием метода 02.

 ['/Users/FK/Documents/image/02/subject1F_200.nrrd', '/Users/FK/Documents/image/02/subject2F_201.nrrd'] 

Позволяет вызвать каталог dir_02. Для целей тестирования можно использовать следующий трехмерный патч. Он имеет ту же форму, что и файл .nrrd при чтении:

 subject1F_200_PP02 = np.random.rand(128,128, 128) subject1F_201_PP02 = np.random.rand(128,128, 128) # and so on... 

Оба объекта одинаковы, но данные патчей предварительно обрабатываются по-разному.

Функции функций

Чтобы вычислить функции, мне нужно использовать следующие функции:

  1. np.median (регулярная функция python и возвращает одно значение)
  2. my_own_function1 (регулярная функция python и возвращает np.array)
  3. my_own_function2 (я могу получить доступ к нему только с помощью механизма matlab и возвращает np.array)

В этом случае мой последний массив numpy должен иметь форму (2,251). Поскольку у меня есть выборки (строки) и 251 функции (столбцы) из моих трех функций.

Вот мой код (кредиты М.Фабре)

Прочитайте патчи

 # Helps me read the files for features 1. and 2. Uses a python .nrrd reader def read_patches_multi1(files_1): for file_1 in files_1: yield nrrd.read(str(file_1)) # Helps me read the files for features 3. Uses a matlab .nrrd reader def read_patches_multi2(files_2): for file_2 in files_2: yield eng.nrrdread(str(file_2)) 

подсчитывать

 def parse_patch_multi(patch1, patch2): # Structure for python .nrrd reader data_1 , option = patch1 # Structure for matlab .nrrd reader data_2 = patch2 # Uses itertools to combine single float32 value with np.array values return [i for i in itertools.chain(np.median(data_1), my_own_function1(data_1), my_own_function2(data_2))] 

выполнение

 # Directories dir_01 = '/Users/FK/Documents/image/01/' dir_02 = '/Users/FK/Documents/image/02/' # Method 01 patch data file_dir_1 = Path(dir_01) files_1 = file_dir_1.glob('*.nrrd') patches_1 = read_patches_multi1(files_1) # Method 02 patch data file_dir_2 = Path(dir_02) files_2 = file_dir_2.glob('*.nrrd') patches_2 = read_patches_multi2(files_2) # I think the error lies here... training_file_multi = np.array([parse_patch_multi(patch1,patch2) for (patch1, patch2) in (patches_1, patches_2)], dtype=np.float32) 

Я пробовал несколько подходов, но я продолжаю получать синтаксическую ошибку или неправильную структуру. Или следующая ошибка типа:

 TypeError: unsupported Python data type: numpy.ndarray 

One Solution collect form web for “Как я могу создать один массив функций numpy из двух массивов и одно значение float?”

Я нашел решение, но оно не кажется слишком элегантным

Я создаю две функции:

 def parse_patch_multi1(patch1): # Structure for python .nrrd reader data_1 , option = patch1 # Uses itertools to combine single float32 value with np.array values return [i for i in itertools.chain(np.median(data_1), 0) my_own_function1(data_1)] def parse_patch_multi2(patch2): # Structure for python .nrrd reader data_2 = patch2 # Uses itertools to combine single float32 value with np.array values return [i for i in itertools.chain(my_own_function2(data_2)] 

выполнение

 # Directories dir_01 = '/Users/FK/Documents/image/01/' dir_02 = '/Users/FK/Documents/image/02/' # Method 01 patch data file_dir_1 = Path(dir_01) files_1 = file_dir_1.glob('*.nrrd') patches_1 = read_patches_multi1(files_1) # Method 02 patch data file_dir_2 = Path(dir_02) files_2 = file_dir_2.glob('*.nrrd') patches_2 = read_patches_multi2(files_2) training_file_multi1 = np.array([parse_patch_multi1(patch1) for (patch1) in patches_1], dtype=np.float32) training_file_multi2 = np.array([parse_patch_multi2(patch2) for (patch2) in patches_1], dtype=np.float32) 

Хитрость

объединить два np.arrays вдоль оси 1

 training_file_combined= np.concatenate((training_file_multi1, training_file_multi2), axis=1) 

Форма матрицы (2,252)

Python - лучший язык программирования в мире.