Це команда minccalc, яку можна запустити в постачальнику безкоштовного хостингу OnWorks за допомогою однієї з наших численних безкоштовних робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн- емулятор Windows або онлайн-емулятор MAC OS
ПРОГРАМА:
ІМ'Я
minccalc - виконувати складні математичні операції над файлами minc
СИНТАКСИС
mincalc [ ] .mnc [ .mnc...] .mnc
ОПИС
Мінкальк виконуватиме складні математичні операції воксель за вокселем над одним або кількома файлами minc
однакової форми та з однаковою вибіркою координат, створюючи один вихідний файл.
Операції, які потрібно виконати, вводяться за допомогою -вираз аргумент (див ВИРАЗИ).
За замовчуванням вихідний файл є останнім аргументом без параметрів. Однак, якщо - вихідний файл
використовується параметр, тоді всі аргументи, які не є параметрами, вважаються вхідними файлами та вихідними
імена файлів походять з - вихідний файл варіанти, яких може бути більше одного.
ВАРІАНТИ
Зауважте, що параметри можна вказувати в скороченому вигляді (якщо вони унікальні) і
можна вказати в будь-якому місці командного рядка.
-2 Створіть вихідні файли формату MINC 2.0.
-допомога Роздрукувати підсумок параметрів командного рядка та вийти.
-версія
Надрукуйте номер версії програми та вийдіть.
- клопітер
Перезаписати наявний файл.
-ноклоббер
Не перезаписувати наявний файл (за замовчуванням).
-no_clobber
Синонім до -noclobber.
-вербозний
Роздрукувати інформацію про хід для кожного фрагмента скопійованих даних (за замовчуванням).
-спокійно Не роздруковуйте інформацію про прогрес.
-відлагоджувати Роздрукуйте інформацію про налагодження.
-copy_header
Скопіюйте всю інформацію заголовка з першого вхідного файлу (за замовчуванням для одного входу
файл).
-nocopy_header
Не копіюйте весь заголовок з першого вхідного файлу; копіювати лише координати
інформація (за замовчуванням для більш ніж одного вхідного файлу).
-тип файлу
Створіть вихідний файл такого ж типу, що й перший вхідний файл (за замовчуванням).
-байт Зберігайте вихідні воксели у 8-розрядному цілочисельному форматі.
- короткий Зберігайте вихідні воксели у 16-розрядному цілочисельному форматі.
-інт Зберігайте вихідні воксели у 32-розрядному цілочисельному форматі.
-довго Замінено на -інт.
- плавати Зберігайте вихідні воксели в 32-бітовому форматі з плаваючою комою.
- подвійний
Зберігайте вихідні воксели в 64-бітовому форматі з плаваючою комою.
-підписано
Використовуйте цілочисельний формат із доповненням до двох. Застосовується, лише якщо вихідний тип вокселя
вказано як цілочисельний тип (один з -байт, - короткий, -інт or -довго).
- без підпису
Використовуйте формат цілого числа без знака. Застосовується, лише якщо вказано тип вихідного вокселу
бути цілочисельним типом (один з -байт, - короткий, -інт or -довго).
- діапазон хвилин Макс
Обмежте допустимий діапазон цілих даних. Застосовується лише в тому випадку, якщо один із -байт,
- короткий, -інт or -довго вказано параметри.
-max_buffer_size_in_kb розмір
Вкажіть максимальний розмір внутрішніх буферів (в кбайтах). За замовчуванням 4096
(4MB).
-розмірність темне ім'я
Вкажіть вимір, уздовж якого ми бажаємо виконати сукупну операцію.
-перевірити_розміри
Перевірте, чи всі вхідні файли мають відповідну вибірку у світових розмірах (за замовчуванням).
-nocheck_dimensions
Ігноруйте будь-які відмінності у вибірці розмірів світу для вхідних файлів.
-propagate_nan
Для кумулятивних векторних операцій (сума, prod та середній), недійсні дані (Not-A-Number
або NaN) у будь-якому елементі вектора в результаті виведе недійсні дані
(за замовчуванням).
-ігнорувати_нан
Для кумулятивних векторних операцій недопустимі дані (NaN) у векторі ігноруються, тобто.
трактуються так, ніби його немає.
-нан Коли виконується незаконна операція з вокселем (наприклад, ділення на нуль),
результатом є недійсні дані (NaN) (за замовчуванням). Немає дійсних вхідних даних для сукупного
операція також вважається незаконною операцією, коли -ігнорувати_нан використовується.
-зеро Коли виконується незаконна операція з вокселем (наприклад, ділення на нуль),
результатом є значення нуль.
-незаконне_значення значення
Коли виконується незаконна операція з вокселем (наприклад, ділення на нуль),
Результат - це значення, зазначене цим параметром.
-вираз рядок
Вкажіть вираз для оцінки на кожному вокселі (див. ВИРАЗИ).
-expfile ім'я файлу
Вкажіть файл, що містить вираз для оцінки на кожному вокселі (див
ВИРАЗИ). Якщо вказано ім’я файлу ``-'', то вираз читається із стандартного входу.
Єдина відмінність від виразів командного рядка полягає в тому, що можна вводити коментарі
файл. Рядок коментаря вказується шляхом розміщення ``#'' як першого не-
пробіл рядка. Скрипти Minccalc можна створювати, налаштувавши параметр
перший рядок до
#! /usr/local/mni/bin/minccalc -expfile
- вихідний файл символ вихідний файл
Вкажіть, що вихідні дані повинні бути записані у вказаний файл, беручи значення з
символ, який слід створити у виразі (див ПРИКЛАДИ розділ). Якщо
ця опція задається, тоді всі аргументи, які не є параметрами, приймаються як вхідні файли. Це
параметр можна використовувати кілька разів для кількох вихідних файлів.
-eval_width значення
Вкажіть кількість вокселів для паралельної обробки. За замовчуванням 200.
ВИРАЗИ
Команда -вираз Аргумент – це один рядок, який описує функцію, яку потрібно оцінити. The
Вираз функції зазвичай записується в термінах вектора A.
Наприклад, наступний вираз буде підсумовувати перші два вхідні файли разом:
A[0] + A[1]
Кілька виразів можна подавати, розділяючи їх крапкою з комою, у цьому випадку лише значення
використовується останній вираз. Ці списки виразів можна використовувати з присвоєнням
вирази, щоб зробити синтаксис дуже схожим на C:
співвідношення = A[0]/A[1]; A[2]*exp(-відношення)
Список виразів у фігурних дужках є дійсним виразом і повертає значення останнього
вираз у списку. Це особливо корисно в та цінності та if вирази (див. нижче).
У мові є два типи значень: вектори та скаляри. Скалярні літерали є
числа з плаваючою комою або можуть відображатися як символи, назва яких починається з малої літери.
Крім звичайних скалярних операторів, таких як +, -, * і /, також мова виразів
підтримує оператор інфіксного підведення до ступеня ^ , звичайні оператори відношень <, <=, >,
>=, ==, !=, а також логічні оператори && (і), || (або) і ! (ні). Зауважте, що
&& та || логічні оператори завжди оцінюють обидва операнди, на відміну від C. Scalar mathematical
функції включають ABS, кв, ехр, журнал, гріх, ство, засмагу, як в, acos та атан. Також є
деякі спеціалізовані функції:
isnan(v) - 1, якщо v є недійсним, і 0 в іншому випадку
clamp(v1,v2,v3) - v1 обмежений [v2, v3]
segment(v1,v2,v3) - перевіряє, чи є v1 у [v2, v3]
Скалярна константа NaN визначається так, що isnan(NaN) повертає 1.
Вектори можна записати у такій "розширеній" формі
[ значення1, значення2, ... ]
або за допомогою таких позначень, що генерують діапазон:
[ a : b ] генерує {a, a+1, ..., b-1, b}
[ a : b ) генерує {a, a+1, ..., b-1}
( a : b ] генерує {a+1, ..., b-1, b}
( a : b ) генерує {a+1, ..., b-1}
або бути породженим «наміром». Наступний вираз інтенсивності генерує вектор
{3,2,1}:
{ я в [1:3] | 4 - i }
Вектори можуть також відображатися як символи, назва яких починається з великої літери.
На додаток до скалярних операторів надаються такі векторні оператори:
avg - середнє значення скалярів у векторі
len - довжина
сума - сума елементів
прод - добуток елементів ст
max - максимальне значення
min - мінімальне значення
imax - індекс максимального значення
imin - індекс мінімального значення
V[s] - s'-ий елемент вектора V з початком 0.
Назви символів вводяться в глобальну таблицю символів за допомогою виразів присвоєння
форма
a = A[2] * журнал(2)
Символи, які починаються з малої літери, представляють скалярів, а символи, які починаються з букви
велика літера позначає вектори. Оскільки = є оператором, його результат можна використовувати в an
вираз (як у С).
Надається кілька конструкцій керування:
Можна створювати цикли для циклу над вектором, призначаючи кожне значення символу, а потім
оцінювання виразу. Це робиться за допомогою виразів форми
всього=0; for{i in [0:len(A))} total=total+A[i]; всього
що еквівалентно сумі (A). Зауважте, що це схоже на використання
всього=0; len{i в [0:len(A)) | total=total+A[i]}; всього
так як та цінності construct насправді є оператором (хоча зазвичай використовується лише для
зміна значень символів). Зауважте також, що без остаточного «всього» вираз би
не дуже корисно, оскільки повертає лише довжину вектора.
Як і в C, список виразів можна вказати у curlies:
всього=всього2 = 0;
для {i в [0:len(A))} {
всього = всього + A[i];
total2 = total2 + A[i]^2
}
Існує також кілька форм якщо-то-інше побудова:
A[0]<0 ? 0 : A[0]
if (A[0]<0) результат=0 else result=A[0]
Команда ще є необов'язковим. Знову ж таки, конструкція if є оператором, а потім or ще
вирази можуть бути списками виразів у завитках, у цьому випадку значення останнього
повертається вираз. Якщо ще вираз відсутній, то повертається значення 0
коли тестовий вираз дорівнює 0 (неправда).
Основна дивність з та цінності та if конструкції полягає в тому, що на відміну від операторів C, вони повинні
відокремлюватись від наступного виразу крапкою з комою, навіть якщо вираз у списку
кучері використовуються:
для i в [0:len(A)) {total=total+A[i]} ; всього/об'єктив(А)
if (A[i]>0) {result=2;} else {result=1} ; результат*5
Альтернативним способом введення назв символів є через дозволяти-вирази. Наприклад,
наступний вираз завжди матиме 3:
нехай a = 1, b = 2 в a + b
Спочатку вони були розроблені для створення змінних лише в межах оцінюваного виразу,
але були внесені зміни, щоб глобальна таблиця символів була змінена.
ПРИКЛАДИ
Ось вираз для розрахунку стандартного відхилення з урахуванням
можливість недійсних вхідних даних, які ігноруються:
s0 = s1 = s2 = 0;
для { i в [0:len(A)) } {
v=A[i];
якщо (!isnan(v)) {
s0 = s0 + 1;
s1 = s1 + v;
s2 = s2 + v*v;
}
};
якщо (s0 > 1) {
sqrt((s2 - s1*s1/s0) / (s0-1));
}
ще {
NaN;
};
Останнє if можна змінити на 0, якщо s0 > 0, але <= 1. Ми також відкидаємо фігурний
дужки, але тоді не повинно бути ";" між if і else
якщо (s0 > 1)
sqrt((s2 - s1*s1/s0) / (s0-1))
інакше якщо (s0 > 0)
0
ще
ні
Якщо ми хочемо як середнє, так і стандартне відхилення, ми можемо використовувати - вихідний файл варіант
виклик команди with
minccalc -expfile stdev \
-outfile означає mean.mnc \
- вихідний файл stdev stdev.mnc \
infile1.mnc infile2.mnc ...
І використовуючи файл виразу (з ще однією формою виразу if):
s0 = s1 = s2 = 0;
для {i в [0:len(A))} {
v=A[i];
якщо (!isnan(v)) {
s0 = s0 + 1;
s1 = s1 + v;
s2 = s2 + v*v;
}
};
stdev = (s0 > 1) ? sqrt((s2 - s1*s1/s0) / (s0-1)):
(s0 > 0) ? 0 : NaN ;
середнє = (s0 > 0) ? s1/s0: NaN;
ПЕРЕКЛАДИ
Кілька речей, які ви повинні пам'ятати...
Векторні змінні повинні починатися з великої літери.
Назви векторних змінних не повинні бути одним із ключових слів функції,
сума, len, добуток, ... тощо
Циклів for і if вирази завжди потрібно відокремлювати від наступного виразу символом a
крапка з комою.
Таблиця символів є глобальною.
Булеві оператори && та || завжди оцінювати обидва операнди.
Примітка щодо паралелізму: з міркувань ефективності оцінки виконуються на багатьох вокселах одночасно
(кількість вокселів називається шириною оцінки і змінюється за допомогою
-eval_width варіант). Дивним наслідком цього є обидві сторони if-else
оператор завжди оцінюється (якщо всі воксели не дають однаковий результат тесту), але
висловлювання в кожній послідовності оцінюються лише на відповідних вокселах. в
зокрема, записи в таблиці символів змінюються лише відповідно до воксельної маски. А
Побічним ефектом цього є те, що будь-який векторний символ, набір в консеквенту if-else, не повинен змінюватися
довжина символу (хоча він може його створити) і обидві сторони наступного повинні
узгодити довжину будь-яких векторних символів, які вони обидва змінюють. Якщо це не зрозуміло,
просто спробуйте - програма буде скаржитися, якщо вона не буде задоволена.
Використовуйте minccalc онлайн за допомогою служб onworks.net