זוהי הפקודה minccalc שניתן להריץ בספק האירוח החינמי של OnWorks באמצעות אחת מתחנות העבודה המקוונות החינמיות שלנו, כגון Ubuntu Online, Fedora Online, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS.
תָכְנִית:
שֵׁם
minccalc - ביצוע פעולות מתמטיות מורכבות על קבצי minc
תַקצִיר
מינקל [ ] .mnc [ .mnc...] .mnc
תיאור
מינקלק יבצע פעולות מתמטיות מורכבות, ווקסל-אחר-ווקסל, על קובץ minc אחד או יותר
בעלי אותה צורה ועם אותה דגימת קואורדינטות, ויוצרים קובץ פלט יחיד.
הפעולות שיש לבצע מוזנות באמצעות -ביטוי טיעון (ראה ביטויים).
כברירת מחדל, קובץ הפלט הוא הארגומנט האחרון שאינו אופציה. עם זאת, אם -תיק
כאשר נעשה שימוש באפשרות, כל הארגומנטים שאינם אופציות נחשבים לקבצי קלט והפלט
שמות הקבצים מגיעים מ- -תיק אפשרויות, שיכולות להיות יותר מאחת.
אפשרויות
שימו לב שניתן לציין אפשרויות בצורה מקוצרת (כל עוד הן ייחודיות) ו
ניתן לתת בכל מקום בשורת הפקודה.
-2 צור קבצי פלט בפורמט MINC 2.0.
עזרה הדפס סיכום של אפשרויות שורת הפקודה וצא.
-הפך
הדפס את מספר הגרסה של התוכנית וצא.
-קלובר
החלף קובץ קיים.
-נוקלובר
אל תדרוס קובץ קיים (ברירת מחדל).
-לא_קלובר
שם נרדף ל-noclobber.
-שורש
הדפס מידע התקדמות עבור כל נתח נתונים שהועתק (ברירת מחדל).
-שֶׁקֶט אל תדפיס מידע על התקדמות.
-לנפות הדפס מידע על ניפוי באגים.
-copy_header
העתק את כל פרטי הכותרת מקובץ הקלט הראשון (ברירת מחדל עבור קלט אחד
קובץ).
-nocopy_header
אל תעתיק את כל הכותרת מקובץ הקלט הראשון; להעתיק רק קואורדינטה
מידע (ברירת מחדל עבור יותר מקובץ קלט אחד).
-סוג קובץ
צור קובץ פלט באותו סוג כמו קובץ הקלט הראשון (ברירת מחדל).
-בייט אחסן ווקסלי פלט בפורמט של מספר שלם של 8 סיביות.
-קצר אחסן ווקסלי פלט בפורמט של מספר שלם של 16 סיביות.
-int אחסן ווקסלי פלט בפורמט של מספר שלם של 32 סיביות.
-ארוך הוחלף על ידי -int.
-לָצוּף אחסן ווקסלי פלט בפורמט נקודה צפה של 32 סיביות.
-לְהַכפִּיל
אחסן ווקסלי פלט בפורמט נקודה צפה של 64 סיביות.
-חתם
השתמש בפורמט המספרים השלמים המשלים עם חתום. חל רק אם סוג ה-Voxel הפלט
מצוין כסוג של מספר שלם (אחד מ -בייט, -קצר, -int or -ארוך).
-לא חתום
השתמש בפורמט מספר שלם לא חתום. חל רק אם צוין סוג ווקסל הפלט
להיות סוג של מספר שלם (אחד מ -בייט, -קצר, -int or -ארוך).
-טווח דקות מקסימום
הגבל את הטווח החוקי של נתונים שלמים. חל רק אם אחד מה -בייט,
-קצר, -int or -ארוך האפשרויות מצוינות.
-max_buffer_size_in_kb גודל
ציין את הגודל המרבי של המאגרים הפנימיים (ב-kbytes). ברירת המחדל היא 4096
(4MB).
- השערה לעמעום
ציין מימד שלאורכו נרצה לבצע פעולה מצטברת.
-ממדים_בדוק
בדוק שלכל קבצי הקלט יש דגימה תואמת במידות העולם (ברירת מחדל).
-nocheck_dimensions
התעלם מכל הבדל בדגימת ממדי העולם עבור קבצי קלט.
-propagate_nan
עבור פעולות וקטור מצטברות (סכום, לְדַרבֵּן ו ממוצע), נתונים לא חוקיים (לא מספר
או NaN) בכל אלמנט של הווקטור יפיק נתונים לא חוקיים בתוצאה
(בְּרִירַת מֶחדָל).
-התעלם_נאן
עבור פעולות וקטור מצטברות, נתונים לא חוקיים (NaN) בווקטור מתעלמים מהם, כלומר.
מתייחסים אליו כאילו הוא לא קיים.
-נאן כאשר מנסים לפעולה לא חוקית ל-voxel (כגון לחלק באפס), ה-
התוצאה היא נתונים לא חוקיים (NaN) (ברירת מחדל). אין נתוני קלט חוקיים עבור ערך מצטבר
פעולה נחשבת גם פעולה בלתי חוקית כאשר -התעלם_נאן משמש.
-אֶפֶס כאשר מנסים לפעולה לא חוקית ל-voxel (כגון לחלק באפס), ה-
התוצאה היא ערך אפס.
-ערך_לא חוקי ערך
כאשר מנסים לפעולה לא חוקית ל-voxel (כגון לחלק באפס), ה-
התוצאה היא הערך שצוין על ידי אפשרות זו.
-ביטוי מחרוזת
ציין את הביטוי שיש להערכה בכל ווקסל (ראה ביטויים).
-expfile שם הקובץ
ציין קובץ המכיל ביטוי להערכה בכל ווקסל (ראה
ביטויים). אם ניתן שם הקובץ ``-'', אז הביטוי נקרא מ-stdin.
ההבדל היחיד מביטויי שורת פקודה הוא שניתן לתת הערות ב
הקובץ. שורת הערה מצוינת על ידי הוספת ``#'' כשורת התגובה הראשונה שאינה
תו רווח לבן של השורה. ניתן ליצור סקריפטים של Minccalc על ידי הגדרת ה-
השורה הראשונה אל
#! /usr/local/mni/bin/minccalc -expfile
-תיק סמל קובץ פלט
ציין שיש לכתוב את הפלט לקובץ שצוין, תוך קבלת ערכים מה-
סמל שיש ליצור בביטוי (ראה את דוגמאות סעיף). אם
אם אפשרות זו ניתנת, כל הארגומנטים שאינם אופציות נלקחים כקבצי קלט.
ניתן להשתמש באפשרות מספר פעמים עבור קבצי פלט מרובים.
רוחב_הערכה ערך
ציין את מספר הווקסלים לעיבוד במקביל. ברירת המחדל היא 200.
ביטויים
השמיים -ביטוי ארגומנט הוא מחרוזת אחת המתארת את הפונקציה שיש לחשב.
ביטוי פונקציה נכתב בדרך כלל במונחים של וקטור A.
לדוגמה, הביטוי הבא יסכם את שני קבצי הקלט הראשונים יחד:
א[0] + א[1]
ניתן לתת ביטויים מרובים המופרדים באמצעות נקודה-פסיק, ובמקרה כזה רק הערך של
הביטוי האחרון נמצא בשימוש. ניתן להשתמש ברשימות ביטויים אלו עם הקצאה
ביטויים כדי להפוך את התחביר לדמוי C מאוד:
יחס = A[0]/A[1]; A[2]*exp(-יחס)
רשימת ביטויים בסוגריים מסולסלים היא ביטוי תקין ומחזירה את הערך של האחרון
ביטוי ברשימה. זה שימושי במיוחד ב ל ו if ביטויים (ראה להלן).
ישנם שני סוגי ערכים בשפה: וקטורים וסקלרים. סקלרים הם ליטרלים
מספרים צפה או עשויים להופיע כסמלים ששמם מתחיל באות קטנה.
מלבד אופרטורים סקלריים רגילים כגון +, -, * ו-/, שפת הביטויים גם
תומך באופרטור האקספוננציציה של infix ^, באופרטורים הרלציוניים הרגילים <, <=, >,
>=, ==, != וכן האופרטורים הבוליאניים && (וגם), || (או) ו-! (לא). שימו לב ש-
אופרטורים בוליאניים && ו-|| תמיד מעריכים את שני האופרנדים, בניגוד ל-C. מתמטיקה סקלרית
הפונקציות כוללות שרירי הבטן, מ"ר, exp, היכנס, חטא, cos, שזוף, אסין, 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}
או להיווצר, על ידי `intension'. ביטוי ה-intension הבא מייצר את הווקטור
{3,2,1}:
{ אני ב-[1:3] | 4 - אני }
וקטורים עשויים להופיע גם כסמלים ששמם מתחיל באות גדולה.
בנוסף לאופרטורים הסקלריים, מסופקים אופרטורי הווקטור הבאים:
ממוצע - הערך הממוצע של הסקלרים בווקטור
לן - אורך ה
סכום - סכום האלמנטים של
תוצר - תוצר של יסודות ה
מקסימום - הערך המקסימלי של
דקות - הערך המינימלי של
imax - מדד הערך המקסימלי של
imin - מדד הערך המינימלי של
V[s] - האיבר ה-s של וקטור V עם מוצא 0.
שמות סמלים מוכנסים לטבלת סמלים גלובלית על ידי ביטויי הקצאה של
טופס
א = א[2] * היכנס(2)
סמלים המתחילים באות קטנה מייצגים סקלר, בעוד שאלו המתחילים באות קטנה מייצגים סקלר.
אות גדולה מייצגת וקטורים. מכיוון ש-= הוא אופרטור, ניתן להשתמש בתוצאה שלו ב
ביטוי (כמו ב-C).
מספר מבני בקרה מסופקים:
ניתן ליצור לולאות עבור לולאה מעל וקטור, תוך הקצאת כל ערך לסמל ולאחר מכן
הערכת ביטוי. זה נעשה עם ביטויים מהצורה
סה"כ=0; עבור{i ב-[0:len(A))} סה"כ=סה"כ+A[i]; סה"כ
אשר שווה ערך ל-sum(A). שימו לב שזה דומה לשימוש
סך הכל=0; len{i בתוך [0:len(A)) | סך הכל=סה"כ+A[i]}; סך הכל
מאז ל קונסטרק הוא למעשה אופרטור (למרות שהוא בדרך כלל משמש רק עבור
שינוי ערכי סמלים). שימו לב גם שללא ה"סכום הסופי", הביטוי יהיה
לא יהיה שימושי במיוחד מכיוון שזה יחזיר רק את אורך הווקטור.
כמו ב-C, ניתן לציין רשימה של ביטויים ב-curlies:
סך הכל=סה"כ2 = 0;
עבור {i בתוך [0:len(A))} {
סך הכל = סך הכל + A[i];
סה"כ2 = סה"כ2 + A[i]^2
}
ישנן גם כמה צורות של ה- אם-אז-אחר לִבנוֹת:
א[0]<0 ? 0 : א[0]
אם (A[0]<0) תוצאה=0 אחרת תוצאה=A[0]
השמיים אחר אופציונלי. שוב, המבנה if הוא אופרטור, וה- אז or אחר
ביטויים יכולים להיות רשימות ביטויים ב-curlies, ובמקרה כזה הערך של האחרון
הביטוי מוחזר. אם ה- אחר אם הביטוי חסר, מוחזר הערך 0
כאשר ביטוי הבדיקה הוא 0 (שקר).
המוזרות העיקרית עם ה- ל ו if המבנים הם שבניגוד למשפטי C, הם חייבים
להיות מופרד מהביטוי הבא באמצעות נקודה-פסיק גם כאשר רשימת ביטויים ב
משתמשים בתלתלים:
עבור i ב-[0:len(A)) {total=total+A[i]} ; total/lens(A)
אם (A[i]>0) {תוצאה=2;} אחרת {תוצאה=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));
}
אחר {
נאן;
};
ניתן לשנות את ה-if האחרון כך שיחזיר 0 אם s0 הוא > 0 אך <= 1. אנו גם מסירים את ה-curly
סוגריים, אבל אז אסור שיהיה ";" בין ה-if ל-else
אם (s0 > 1)
sqrt((s2 - s1*s1/s0) / (s0-1))
אחרת אם (s0 > 0)
0
אחר
NaN
אם נרצה גם את הממוצע וגם את סטיית התקן, נוכל להשתמש ב- -תיק אוֹפְּצִיָה,
הפעלת הפקודה עם
minccalc -expfile stdev \
-outfile משמעות mean.mnc
קובץ outfile 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 ;
מערות
כמה דברים שכדאי לכם לזכור...
משתני וקטור חייבים להתחיל באות גדולה.
שמות משתני וקטור אינם יכולים להיות אחת ממילות המפתח של הפונקציה,
סכום, אורך, ייצור, ... וכו'
עבור לולאות ואם ביטויים תמיד צריכים להיות מופרדים מהביטוי הבא על ידי
נְקוּדָה וּפְסִיק.
טבלת הסמלים היא גלובלית.
האופרטורים הבוליאניים && ו-|| תמיד מעריכים את שני האופרנדים.
הערה לגבי מקביליות: משיקולי יעילות, הערכות מתבצעות על ווקסלים רבים בו זמנית.
(מספר הווקסלים מכונה רוחב ההערכה ומשתנה עם
מה היא רוחב_הערכה תוצאה מוזרה של כך היא ששני צידי האפשרות "אם-אחרת"
משפטים תמיד מוערכים (אלא אם כן כל הווקסלים נותנים את אותה תוצאת בדיקה), אבל
הצהרות בתוך כל תוצאה מוערכות רק על הווקסלים המתאימים. ב
בפרט, ערכים בטבלת הסמלים משתנים רק בהתאם למסיכת ווקסל.
תופעת לוואי של זה היא שכל קבוצת סמלים וקטורית בתוצאת if-else לא חייבת להשתנות
אורך הסמל (למרות שהוא יכול ליצור אותו) ושני צידי התוצאה חייבים להיות
להסכים על אורך כל סמלים וקטוריים ששניהם משנים. אם זה לא ברור,
פשוט תנסה את זה - התוכנה תתלונן אם היא לא תהיה מרוצה.
השתמש ב-minccalc באופן מקוון באמצעות שירותי onworks.net