นี่คือคำสั่ง minccalc ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้เวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
minccalc - ดำเนินการทางคณิตศาสตร์ที่ซับซ้อนในไฟล์ minc
เรื่องย่อ
แคลต่ำ [ ] .mnc [ .mnc...] .mnc
DESCRIPTION
มินคาแอล จะทำการคำนวณทางคณิตศาสตร์แบบ voxel-by-voxel ที่ซับซ้อน บนไฟล์ minc หนึ่งไฟล์ขึ้นไป
ที่มีรูปร่างเหมือนกันและมีการสุ่มตัวอย่างพิกัดเหมือนกัน ทำให้เกิดไฟล์เอาต์พุตเดียว
การดำเนินการที่จะดำเนินการคือการป้อนข้อมูลโดยใช้ - การแสดงออก อาร์กิวเมนต์ (ดู การแสดงออก).
โดยค่าเริ่มต้น ไฟล์เอาต์พุตคืออาร์กิวเมนต์ที่ไม่มีตัวเลือกสุดท้าย อย่างไรก็ตาม หาก -outfile
ใช้ตัวเลือก จากนั้นอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือกทั้งหมดจะถือเป็นไฟล์อินพุตและเอาต์พุต
ชื่อไฟล์มาจาก -outfile ตัวเลือกซึ่งสามารถมีได้มากกว่าหนึ่งตัวเลือก
OPTIONS
โปรดทราบว่าตัวเลือกสามารถระบุในรูปแบบย่อได้ (ตราบใดที่ไม่ซ้ำกัน) และ
สามารถให้ที่ใดก็ได้บนบรรทัดคำสั่ง
-2 สร้างไฟล์เอาต์พุตรูปแบบ MINC 2.0
-ช่วยด้วย พิมพ์สรุปตัวเลือกบรรทัดคำสั่งและออก
-version
พิมพ์หมายเลขเวอร์ชันของโปรแกรมและออก
-ทุบ
เขียนทับไฟล์ที่มีอยู่
-Noclobber
อย่าเขียนทับไฟล์ที่มีอยู่ (ค่าเริ่มต้น)
-no_clobber
คำพ้องความหมายสำหรับ -noclobber
-รายละเอียด
พิมพ์ข้อมูลความคืบหน้าสำหรับแต่ละกลุ่มข้อมูลที่คัดลอก (ค่าเริ่มต้น)
-เงียบ อย่าพิมพ์ข้อมูลความคืบหน้า
-debug พิมพ์ข้อมูลการดีบัก
-copy_header
คัดลอกข้อมูลส่วนหัวทั้งหมดจากไฟล์อินพุตแรก (ค่าเริ่มต้นสำหรับอินพุตเดียว
แฟ้ม)
-nocopy_header
อย่าคัดลอกส่วนหัวทั้งหมดจากไฟล์อินพุตแรก คัดลอกเฉพาะพิกัด
ข้อมูล (ค่าเริ่มต้นสำหรับไฟล์อินพุตมากกว่าหนึ่งไฟล์)
-ประเภทไฟล์
สร้างไฟล์เอาต์พุตที่มีประเภทเดียวกับไฟล์อินพุตแรก (ค่าเริ่มต้น)
-ไบต์ จัดเก็บ voxels เอาต์พุตในรูปแบบจำนวนเต็ม 8 บิต
-สั้น จัดเก็บ voxels เอาต์พุตในรูปแบบจำนวนเต็ม 16 บิต
-int จัดเก็บ voxels เอาต์พุตในรูปแบบจำนวนเต็ม 32 บิต
-ยาว แทนที่โดย -int.
-ลอย เก็บเอาต์พุต voxels ในรูปแบบทศนิยม 32 บิต
-Double
เก็บเอาต์พุต voxels ในรูปแบบทศนิยม 64 บิต
-ลงนาม
ใช้รูปแบบจำนวนเต็มเสริมสองแบบที่ลงนามแล้ว ใช้เฉพาะในกรณีที่เอาต์พุต voxel type
ถูกกำหนดให้เป็นประเภทจำนวนเต็ม (หนึ่งใน -ไบต์, -สั้น, -int or -ยาว).
-ไม่ได้ลงนาม
ใช้รูปแบบจำนวนเต็มไม่มีเครื่องหมาย ใช้เฉพาะในกรณีที่ระบุประเภทเอาต์พุต voxel เป็น
เป็นประเภทจำนวนเต็ม (หนึ่งใน -ไบต์, -สั้น, -int or -ยาว).
-พิสัย นาที แม็กซ์
จำกัดช่วงที่ถูกต้องของข้อมูลจำนวนเต็ม ใช้เฉพาะในกรณีที่ -ไบต์,
-สั้น, -int or -ยาว มีการระบุตัวเลือก
-max_buffer_size_in_kb ขนาด
ระบุขนาดสูงสุดของบัฟเฟอร์ภายใน (เป็น kbytes) ค่าเริ่มต้นคือ4096
(4MB)
-Dimension สลัว
ระบุมิติที่เราต้องการดำเนินการสะสม
-ตรวจสอบ_ขนาด
ตรวจสอบว่าไฟล์อินพุตทั้งหมดมีการสุ่มตัวอย่างที่ตรงกันในมิติของโลก (ค่าเริ่มต้น)
-nocheck_ขนาด
ละเว้นความแตกต่างใดๆ ในการสุ่มตัวอย่างมิติของโลกสำหรับไฟล์อินพุต
-propagate_nan
สำหรับการดำเนินการเวกเตอร์สะสม (รวม, แยง และ เฉลี่ย) ข้อมูลที่ไม่ถูกต้อง (Not-A-Number
หรือ NaN) ในองค์ประกอบใด ๆ ของเวกเตอร์จะสร้างข้อมูลที่ไม่ถูกต้องในผลลัพธ์
(ค่าเริ่มต้น).
-ignore_nan
สำหรับการดำเนินการเวกเตอร์สะสม ข้อมูลที่ไม่ถูกต้อง (NaN) ในเวกเตอร์จะถูกละเว้น กล่าวคือ
ถือว่าไม่มีอยู่จริง
- แนน เมื่อมีการพยายามดำเนินการที่ผิดกฎหมายที่ voxel (เช่นหารด้วยศูนย์) the
ผลลัพธ์เป็นข้อมูลที่ไม่ถูกต้อง (NaN) (ค่าเริ่มต้น) ไม่มีข้อมูลอินพุตที่ถูกต้องสำหรับสะสม
การดำเนินการยังถือเป็นการดำเนินการที่ผิดกฎหมายเมื่อ -ignore_nan ถูกนำมาใช้.
-ศูนย์ เมื่อมีการพยายามดำเนินการที่ผิดกฎหมายที่ voxel (เช่นหารด้วยศูนย์) the
ผลลัพธ์คือค่าศูนย์
-illegal_value ความคุ้มค่า
เมื่อมีการพยายามดำเนินการที่ผิดกฎหมายที่ voxel (เช่นหารด้วยศูนย์) the
ผลลัพธ์คือค่าที่ระบุโดยตัวเลือกนี้
- การแสดงออก เชือก
ระบุนิพจน์เพื่อประเมินในแต่ละ voxel (ดู EXPRESSIONS)
-expfile ชื่อไฟล์
ระบุไฟล์ที่มีนิพจน์เพื่อประเมินในแต่ละ voxel (ดู
นิพจน์). หากระบุชื่อไฟล์ ``-'' นิพจน์จะถูกอ่านจาก stdin
ข้อแตกต่างเพียงอย่างเดียวจากนิพจน์บรรทัดคำสั่งคือสามารถให้ความคิดเห็นใน
ไฟล์. บรรทัดความคิดเห็นถูกระบุโดยการวาง ``#'' เป็นบรรทัดแรกที่ไม่ใช่
อักขระช่องว่างของบรรทัด สคริปต์ Minccalc สามารถสร้างได้โดยการตั้งค่า
บรรทัดแรกถึง
#! /usr/local/mni/bin/minccal -expfile
-outfile เครื่องหมาย ไฟล์เอาต์พุต
ระบุว่าควรเขียนเอาต์พุตไปยังไฟล์ที่ระบุโดยรับค่าจาก
สัญลักษณ์ที่ควรสร้างขึ้นในนิพจน์ (ดู ตัวอย่าง ส่วน). ถ้า
ให้ตัวเลือกนี้ จากนั้นอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือกทั้งหมดจะถูกนำมาเป็นไฟล์อินพุต นี้
สามารถใช้ตัวเลือกได้หลายครั้งสำหรับไฟล์ที่ส่งออกหลายไฟล์
-eval_width ความคุ้มค่า
ระบุจำนวน voxels ที่จะประมวลผลแบบขนาน ค่าเริ่มต้นคือ 200
การแสดงออก
พื้นที่ - การแสดงออก อาร์กิวเมนต์เป็นสตริงเดียวที่อธิบายฟังก์ชันที่จะประเมิน NS
โดยทั่วไป นิพจน์ของฟังก์ชันจะเขียนในรูปของเวกเตอร์ A
ตัวอย่างเช่น นิพจน์ต่อไปนี้จะรวมไฟล์อินพุตสองไฟล์แรกเข้าด้วยกัน:
เอ[0] + เอ[1]
สามารถกำหนดได้หลายนิพจน์คั่นด้วยเครื่องหมายอัฒภาค ซึ่งในกรณีนี้ เฉพาะค่าของ
ใช้นิพจน์สุดท้าย รายการนิพจน์เหล่านี้สามารถใช้กับการมอบหมายได้
นิพจน์เพื่อให้ไวยากรณ์เหมือน C มาก:
อัตราส่วน = A[0]/A[1]; A[2]*exp(-อัตราส่วน)
รายการนิพจน์ในวงเล็บปีกกาเป็นนิพจน์ที่ถูกต้องและส่งกลับค่าของlast
การแสดงออกในรายการ สิ่งนี้มีประโยชน์อย่างยิ่งใน for และ if นิพจน์ (ดูด้านล่าง)
ค่าในภาษามีสองประเภท: เวกเตอร์และสเกลาร์ ตัวอักษรสเกลาร์คือ
เลขทศนิยมหรืออาจปรากฏเป็นสัญลักษณ์ที่ชื่อขึ้นต้นด้วยตัวพิมพ์เล็ก
นอกจากตัวดำเนินการสเกลาร์ปกติ เช่น +, -, * และ / ภาษานิพจน์ก็เช่นกัน
รองรับตัวดำเนินการยกกำลัง infix ^ ตัวดำเนินการเชิงสัมพันธ์ปกติ <, <=, >,
>=, ==, != เช่นเดียวกับตัวดำเนินการบูลีน && (และ), || (หรือ) และ ! (ไม่). โปรดทราบว่า
&& และ || ตัวดำเนินการบูลีนจะประเมินตัวถูกดำเนินการทั้งสองเสมอ ไม่เหมือน C. Scalar mathematical
รวมถึงฟังก์ชันต่างๆ เอบีเอส, ตร.ว, ประสบการณ์, เข้าสู่ระบบ, บาป, เกวียน, สีน้ำตาล, อาซิน, เอคอส และ Atan. นอกจากนี้ยังมี
ฟังก์ชั่นพิเศษบางอย่าง:
isnan(v) - 1 ถ้า v ไม่ถูกต้องและ 0 มิฉะนั้น
แคลมป์(v1,v2,v3) - v1 ล้อมรอบด้วย [v2, v3]
เซ็กเมนต์ (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}
หรือสร้างขึ้นโดย 'เจตนา' นิพจน์ความตั้งใจต่อไปนี้สร้าง vector
{3,2,1}:
{ ใน [1:3] | 4 - ฉัน }
เวกเตอร์อาจปรากฏเป็นสัญลักษณ์ที่มีชื่อขึ้นต้นด้วยตัวพิมพ์ใหญ่
นอกจากตัวดำเนินการสเกลาร์แล้ว ยังมีตัวดำเนินการเวกเตอร์ต่อไปนี้อีกด้วย:
เฉลี่ย - ค่าเฉลี่ยของสเกลาร์ในเวกเตอร์
len - ความยาวของ
sum - ผลรวมขององค์ประกอบของ
prod - ผลิตภัณฑ์ขององค์ประกอบของ
max - ค่าสูงสุดของ
min - ค่าต่ำสุดของ
imax - ดัชนีของค่าสูงสุดของ
imin - ดัชนีของค่าต่ำสุดของ
V[s] - องค์ประกอบที่ s'ของเวกเตอร์ V ที่มีจุดกำเนิด 0
ชื่อสัญลักษณ์ถูกนำมาใช้ในตารางสัญลักษณ์สากลโดยนิพจน์การกำหนดของ
ฟอร์ม
เอ = เอ[2] * เข้าสู่ระบบ(2)
สัญลักษณ์ที่ขึ้นต้นด้วยตัวพิมพ์เล็กแสดงถึงสเกลาร์ในขณะที่สัญลักษณ์ที่ขึ้นต้นด้วย an
ตัวพิมพ์ใหญ่แสดงถึงเวกเตอร์ เนื่องจาก = เป็นโอเปอเรเตอร์ จึงสามารถใช้ผลลัพธ์เป็น an
นิพจน์ (เช่นใน C)
มีการจัดโครงสร้างการควบคุมบางส่วน:
สำหรับลูปสามารถสร้างขึ้นเพื่อวนซ้ำบนเวกเตอร์โดยกำหนดค่าแต่ละค่าให้กับสัญลักษณ์แล้ว
การประเมินการแสดงออก ทำได้ด้วยนิพจน์ของแบบฟอร์ม
รวม=0; สำหรับ{i ใน [0:len(A))} total=total+A[i]; ทั้งหมด
ซึ่งเท่ากับผลรวม (A) โปรดทราบว่าสิ่งนี้คล้ายกับการใช้
รวม=0; len{i ใน [0:len(A)) | รวม=ทั้งหมด+A[i]}; ทั้งหมด
ตั้งแต่ for construct เป็นโอเปอเรเตอร์จริง ๆ (แม้ว่าโดยทั่วไปจะใช้สำหรับ .เท่านั้น
เปลี่ยนค่าสัญลักษณ์) โปรดทราบว่าหากไม่มี "ผลรวม" สุดท้าย นิพจน์จะ
ไม่ได้มีประโยชน์มากนักเพราะมันจะส่งกลับเฉพาะความยาวของเวกเตอร์เท่านั้น
เช่นเดียวกับใน C รายการนิพจน์สามารถระบุเป็นลอนได้:
ทั้งหมด=รวม2 = 0;
สำหรับ {i ใน [0:len(A))} {
รวม = รวม + A[i];
ทั้งหมด 2 = ทั้งหมด 2 + A[i]^2
}
นอกจากนี้ยังมีรูปแบบบางอย่างของ ถ้า - แล้ว - อื่น สร้าง:
เอ[0]<0 ? 0 : เอ[0]
ถ้า (A[0]<0) ผลลัพธ์=0 อื่น ๆ ผลลัพธ์=A[0]
พื้นที่ อื่น เป็นทางเลือก อีกครั้ง if construct เป็นโอเปอเรเตอร์ และ แล้วก็ or อื่น
นิพจน์สามารถเป็นรายการนิพจน์ใน curlies ซึ่งในกรณีนี้ค่าของlast
นิพจน์จะถูกส่งกลับ ถ้า อื่น นิพจน์หายไป จากนั้นค่า 0 จะถูกส่งกลับ
เมื่อนิพจน์การทดสอบเป็น 0 (เท็จ)
ความแปลกประหลาดหลักกับ for และ if โครงสร้างนั้นแตกต่างจากคำสั่ง C พวกเขาจะต้อง
แยกออกจากนิพจน์ถัดไปด้วยเครื่องหมายอัฒภาคแม้ว่านิพจน์จะแสดงรายการใน
ใช้หยิก:
สำหรับฉันใน [0:len(A)) {total=total+A[i]} ; รวม/เลน(A)
ถ้า (A[i]>0) {result=2;} อื่น {result=1} ; ผลลัพธ์*5
วิธีอื่นในการแนะนำชื่อสัญลักษณ์คือผ่าน ให้-นิพจน์ ตัวอย่างเช่น
นิพจน์ต่อไปนี้จะประเมินเป็น 3:
ให้ a = 1, b = 2 ใน a + b
แต่เดิมออกแบบมาเพื่อสร้างตัวแปรภายในนิพจน์ที่ประเมินเท่านั้น
แต่มีการปรับเปลี่ยนเพื่อให้ตารางสัญลักษณ์สากลมีการเปลี่ยนแปลง
ตัวอย่าง
นี่คือนิพจน์สำหรับการคำนวณค่าเบี่ยงเบนมาตรฐานโดยคำนึงถึง
ความเป็นไปได้ของข้อมูลที่ป้อนไม่ถูกต้อง ซึ่งถูกละเว้น:
s0 = s1 = s2 = 0;
สำหรับ { ใน [0:len(A)) } {
v=A[ผม];
ถ้า (!isnan(v)) {
s0 = s0 + 1;
s1 = s1 + โวลต์;
s2 = s2 + วี*วี;
}
};
ถ้า (s0 > 1) {
sqrt((s2 - s1*s1/s0) / (s0-1));
}
else {
น่าน;
};
สุดท้าย if สามารถเปลี่ยนเป็น 0 ถ้า s0 เป็น > 0 แต่ <= 1 เรายังปล่อย curl
วงเล็บ แต่ต้องไม่มี ";" ระหว่าง if และ else
ถ้า (s0 > 1)
sqrt((s2 - s1*s1/s0) / (s0-1))
อื่นถ้า (s0 > 0)
0
อื่น
น่าน
หากเราต้องการทั้งค่าเฉลี่ยและค่าเบี่ยงเบนมาตรฐาน เราก็สามารถใช้ -outfile ตัวเลือก
เรียกใช้คำสั่งด้วย
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[ผม];
ถ้า (!isnan(v)) {
s0 = s0 + 1;
s1 = s1 + โวลต์;
s2 = s2 + วี*วี;
}
};
stdev = (s0 > 1) ? sqrt((s2 - s1*s1/s0) / (s0-1)) :
(s0 > 0) ? 0 : น่าน ;
ค่าเฉลี่ย = (s0 > 0) ? s1 / s0 : น่าน ;
คำเตือน
บางสิ่งที่คุณควรจำ...
ตัวแปรเวกเตอร์ต้องขึ้นต้นด้วยตัวพิมพ์ใหญ่
ชื่อตัวแปรเวกเตอร์ต้องไม่เป็นหนึ่งในคีย์เวิร์ดของฟังก์ชัน
sum, len, prod, ... ฯลฯ
สำหรับลูปและถ้านิพจน์ต้องแยกจากนิพจน์ถัดไปด้วย a . เสมอ
อัฒภาค.
ตารางสัญลักษณ์เป็นแบบโกลบอล
ตัวดำเนินการบูลีน && และ || ประเมินตัวถูกดำเนินการทั้งสองเสมอ
หมายเหตุเกี่ยวกับการขนานกัน: ด้วยเหตุผลด้านประสิทธิภาพ การประเมินจะทำใน voxels จำนวนมากพร้อมกัน
(จำนวน voxels เรียกว่าความกว้างของการประเมินและเปลี่ยนด้วย
-eval_width ตัวเลือก). ผลที่แปลกประหลาดก็คือว่าทั้งสองข้างของ if-else
คำสั่งจะถูกประเมินเสมอ (เว้นแต่ voxels ทั้งหมดจะให้ผลการทดสอบเหมือนกัน) แต่
ข้อความในแต่ละผลที่ตามมาจะได้รับการประเมินเฉพาะในว็อกเซลที่เหมาะสมเท่านั้น ใน
โดยเฉพาะอย่างยิ่ง รายการในตารางสัญลักษณ์จะได้รับการแก้ไขตามรูปแบบ voxel เท่านั้น NS
ผลข้างเคียงของสิ่งนี้คือสัญลักษณ์เวกเตอร์ใด ๆ ที่ตั้งค่าเป็น if-else จะต้องไม่เปลี่ยนแปลง
ความยาวของสัญลักษณ์ (แม้ว่าจะสามารถสร้างได้) และทั้งสองด้านของผลที่ตามมาจะต้อง
เห็นด้วยกับความยาวของสัญลักษณ์เวกเตอร์ที่ทั้งคู่แก้ไข หากไม่ชัดเจน
แค่ลอง - โปรแกรมจะบ่นถ้ามันไม่มีความสุข
ใช้ minccalc ออนไลน์โดยใช้บริการ onworks.net