het EngelsFransSpaans

Servers draaien | Ubuntu > | Fedora > |


OnWorks-favicon

minccalc - Online in de cloud

Voer minccalc uit in de gratis hostingprovider van OnWorks via Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator

Dit is de opdracht minccalc die kan worden uitgevoerd in de gratis hostingprovider van OnWorks met behulp van een van onze meerdere gratis online werkstations zoals Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator

PROGRAMMA:

NAAM


minccalc - complexe wiskundige bewerkingen uitvoeren op minc-bestanden

KORTE INHOUD


mincalc [ ] .mnc [ .mnc...] .mnc

PRODUCTBESCHRIJVING


Minccalc zal complexe, voxel-voor-voxel wiskundige bewerkingen uitvoeren op een of meer minc-bestanden
van dezelfde vorm en met dezelfde coördinatenbemonstering, waardoor een enkel uitvoerbestand wordt geproduceerd.
De uit te voeren bewerkingen worden ingevoerd met behulp van de -uitdrukking argument (zie UITDRUKKINGEN).
Standaard is het uitvoerbestand het laatste niet-optieargument. Als de -outfile
optie wordt gebruikt, dan worden alle niet-optie-argumenten beschouwd als invoerbestanden en de uitvoer
bestandsnamen komen van de -outfile opties, waarvan er meer dan één kunnen zijn.

OPTIES


Houd er rekening mee dat opties in verkorte vorm kunnen worden opgegeven (zolang ze uniek zijn) en
kan overal op de opdrachtregel worden gegeven.

-2 Maak uitvoerbestanden in MINC 2.0-formaat.

-Help Druk een samenvatting van de opdrachtregelopties af en sluit af.

-versie
Druk het versienummer van het programma af en sluit af.

-klodder
Een bestaand bestand overschrijven.

-noclobber
Overschrijf een bestaand bestand niet (standaard).

-no_clobber
Synoniem voor -noclobber.

-uitgebreid
Druk voortgangsinformatie af voor elk stuk gekopieerde gegevens (standaard).

-rustig Druk geen voortgangsinformatie af.

-debuggen Foutopsporingsinformatie afdrukken.

-copy_header
Kopieer alle koptekstinformatie van het eerste invoerbestand (standaard voor één invoer
bestand).

-nocopy_header
Kopieer niet de hele header van het eerste invoerbestand; kopieer alleen coördinaat
informatie (standaard voor meer dan één invoerbestand).

-bestandstype
Maak een uitvoerbestand met hetzelfde type als het eerste invoerbestand (standaard).

-byte Sla uitvoervoxels op in 8-bits integer-indeling.

-korte Sla uitvoervoxels op in 16-bits integer-indeling.

-in Sla uitvoervoxels op in 32-bits integer-indeling.

-lange vervangen door -in.

-vlotter Sla uitvoervoxels op in 32-bits drijvende-komma-indeling.

-dubbele
Sla uitvoervoxels op in 64-bits drijvende-komma-indeling.

-ondertekend
Gebruik ondertekend, two's complement integer formaat. Is alleen van toepassing als het uitvoervoxeltype
is opgegeven als een geheel getal (een van -byte, -korte, -in or -lange).

-ongetekend
Gebruik een niet-ondertekend geheel getal. Is alleen van toepassing als het uitvoervoxeltype is opgegeven om:
een geheel getal zijn (een van -byte, -korte, -in or -lange).

-bereik Min max
Beperk het geldige bereik van integere gegevens. Geldt alleen als een van de -byte,
-korte, -in or -lange opties is opgegeven.

-max_buffer_size_in_kb grootte
Specificeer de maximale grootte van de interne buffers (in kbytes). Standaard is 4096
(4MB).

-Afmetingen dimnaam
Specificeer een dimensie waarlangs we een cumulatieve bewerking willen uitvoeren.

-check_dimensies
Controleer of alle invoerbestanden overeenkomende steekproeven in werelddimensies hebben (standaard).

-nocheck_dimensions
Negeer eventuele verschillen in bemonstering van werelddimensies voor invoerbestanden.

-propagate_nan
Voor cumulatieve vectorbewerkingen (som, por en avg), ongeldige gegevens (Not-A-Number
of NaN) in een element van de vector zal ongeldige gegevens in het resultaat opleveren
(standaard).

-ignore_nan
Voor cumulatieve vectorbewerkingen worden ongeldige gegevens (NaN) in de vector genegeerd, dwz.
behandeld alsof het er niet is.

-nan Wanneer een illegale bewerking wordt geprobeerd op een voxel (zoals delen door nul), wordt de
resultaat is ongeldige gegevens (NaN) (standaard). Geen geldige invoergegevens hebben voor een cumulatief
operatie wordt ook beschouwd als een illegale operatie wanneer: -ignore_nan is gebruikt.

-nul Wanneer een illegale bewerking wordt geprobeerd op een voxel (zoals delen door nul), wordt de
resultaat is waarde nul.

-illegale_waarde waarde
Wanneer een illegale bewerking wordt geprobeerd op een voxel (zoals delen door nul), wordt de
resultaat is de waarde die door deze optie is opgegeven.

-uitdrukking snaar
Geef de uitdrukking op die bij elke voxel moet worden geëvalueerd (zie EXPRESSIES).

-expfile bestandsnaam
Specificeer een bestand dat een uitdrukking bevat om bij elke voxel te evalueren (zie
UITDRUKKINGEN). Als bestandsnaam ``-'' wordt gegeven, dan wordt de expressie gelezen uit stdin.
Het enige verschil met opdrachtregeluitdrukkingen is dat opmerkingen kunnen worden gegeven in
het bestand. Een commentaarregel wordt gespecificeerd door een ``#'' te plaatsen als de eerste niet-
witruimteteken van de regel. Minccalc-scripts kunnen worden gemaakt door de
eerste regel naar

#! /usr/local/mni/bin/minccalc -expfile

-outfile symbool output-bestand
Geef op dat de uitvoer naar het opgegeven bestand moet worden geschreven, waarbij de waarden van de
symbool dat in de uitdrukking moet worden gemaakt (zie de Voorbeelden sectie). Indien
deze optie wordt gegeven, dan worden alle niet-optie-argumenten als invoerbestanden genomen. Dit
optie kan meerdere keren worden gebruikt voor meerdere uitvoerbestanden.

-eval_width waarde
Geef het aantal voxels op dat parallel moet worden verwerkt. Standaard is 200.

UITDRUKKINGEN


Het -uitdrukking argument is een enkele tekenreeks die de te evalueren functie beschrijft. De
functie-expressie wordt meestal geschreven in termen van de vector A.

De volgende uitdrukking zal bijvoorbeeld de eerste twee invoerbestanden bij elkaar optellen:

EEN[0] + EEN[1]

Meerdere uitdrukkingen kunnen worden gegeven, gescheiden door puntkomma's, in welk geval alleen de waarde van
de laatste uitdrukking wordt gebruikt. Deze uitdrukkingslijsten kunnen worden gebruikt met toewijzing
expressies om de syntaxis erg C-achtig te maken:

verhouding = A[0]/A[1]; A[2]*exp(-verhouding)

Een lijst met uitdrukkingen tussen accolades is een geldige uitdrukking en retourneert de waarde van last
uitdrukking in de lijst. Dit is vooral handig bij heeft gewacht en if uitdrukkingen (zie hieronder).

Er zijn twee soorten waarden in de taal: vectoren en scalaire waarden. Scalaire letterlijke woorden zijn
getallen met drijvende komma of kunnen verschijnen als symbolen waarvan de naam begint met een kleine letter.

Naast normale scalaire operatoren zoals +, -, * en /, is de uitdrukkingstaal ook
ondersteunt de infix exponentiation operator ^ , de gebruikelijke relationele operatoren <, <=, >,
>=, ==, != evenals de booleaanse operatoren && (en), || (of en ! (niet). Merk op dat de
&& en || booleaanse operatoren evalueren altijd beide operanden, in tegenstelling tot C. Scalar wiskundig
functies omvatten: abs, sqrt, exp, inloggen, zonde, cos, looien, als in, acos en een tint. Er zijn ook
enkele gespecialiseerde functies:

isnan(v) - 1 als v ongeldig is en anders 0
klem (v1,v2,v3) - v1 begrensd door [v2, v3]
segment(v1,v2,v3) - test of v1 zich in [v2, v3] bevindt

De scalaire constante NaN is zo gedefinieerd dat isnan(NaN) retourneert 1.

Vectoren kunnen worden geschreven in de volgende `extensieve' vorm

[ waarde1, waarde2, ... ]

of door de volgende bereikgenererende notaties te gebruiken:

[ a : b ] genereert {a, a+1, ..., b-1, b}
[ a : b ) genereert {a, a+1, ..., b-1}
( a : b ] genereert {a+1, ..., b-1, b}
( a : b ) genereert {a+1, ..., b-1}

of worden gegenereerd, door 'intentie'. De volgende intentie-expressie genereert de vector
{3,2,1}:

{ ik in [1:3] | 4 - ik }

Vectoren kunnen ook verschijnen als symbolen waarvan de naam begint met een hoofdletter.

Naast de scalaire operatoren worden de volgende vectoroperatoren geleverd:

avg - de gemiddelde waarde van de scalaire waarden in vector
len - de lengte van
som - de som van de elementen van
prod - het product van de elementen van
max - de maximale waarde van
min - de minimale waarde van
imax - de index van de maximale waarde van
imin - de index van de minimumwaarde van
V[s] - het s'de element van vector V met oorsprong 0.

Symboolnamen worden geïntroduceerd in een globale symbooltabel door toewijzingsexpressies van de
formulier

een = EEN[2] * inloggen(2)

Symbolen die beginnen met een kleine letter vertegenwoordigen scalairen, terwijl symbolen die beginnen met een
hoofdletters vertegenwoordigen vectoren. Aangezien = een operator is, kan het resultaat ervan worden gebruikt in een
uitdrukking (zoals in C).

Er worden enkele controleconstructies gegeven:

Er kunnen for-lussen worden gemaakt om over een vector te lopen, waarbij elke waarde aan een symbool wordt toegewezen en dan
het evalueren van een uitdrukking. Dit wordt gedaan met uitdrukkingen van de vorm

totaal=0; for{i in [0:len(A))} totaal=totaal+A[i]; totaal

wat gelijk is aan som (A). Merk op dat dit vergelijkbaar is met het gebruik van

totaal=0; len{i in [0:len(A)) | totaal=totaal+A[i]}; totaal

omdat de heeft gewacht construct is eigenlijk een operator (hoewel het meestal alleen wordt gebruikt voor)
symboolwaarden wijzigen). Merk ook op dat zonder het laatste "totaal", de uitdrukking zou
niet erg handig zijn, omdat het alleen de lengte van de vector zou retourneren.

Net als in C kan een lijst met uitdrukkingen worden opgegeven in curlies:

totaal=totaal2 = 0;
voor {i in [0:len(A))} {
totaal = totaal + A[i];
totaal2 = totaal2 + A[i]^2
}

Er zijn ook een paar vormen van de als dan anders construct:

EEN[0]<0 ? 0 : EEN[0]

if (A[0]<0) resultaat=0 else resultaat=A[0]

Het anders is optioneel. Nogmaals, de if-constructie is een operator, en de harte or anders
uitdrukkingen kunnen uitdrukkingenlijsten in curlies zijn, in welk geval de waarde van de laatste
uitdrukking wordt geretourneerd. Als de anders uitdrukking ontbreekt, dan wordt de waarde 0 geretourneerd
wanneer de testuitdrukking 0 (false) is.

De belangrijkste eigenaardigheid met de heeft gewacht en if constructen is dat ze, in tegenstelling tot C-statements, moeten
worden gescheiden van de volgende uitdrukking door een puntkomma, zelfs wanneer een lijst met uitdrukkingen in
curlies wordt gebruikt:

voor i in [0:len(A)) {totaal=totaal+A[i]} ; totaal/lens(A)
if (A[i]>0) {resultaat=2;} else {resultaat=1} ; resultaat*5

Een alternatieve manier om symboolnamen te introduceren is door middel van laten-uitdrukkingen. Bijvoorbeeld de
volgende uitdrukking zal altijd resulteren in 3:

laat a = 1, b = 2 in a + b

Deze waren oorspronkelijk ontworpen om alleen variabelen te maken binnen de geëvalueerde uitdrukking,
maar er zijn wijzigingen aangebracht zodat de algemene symbooltabel is gewijzigd.

Voorbeelden


Hier is een uitdrukking voor het berekenen van de standaarddeviatie, rekening houdend met de
mogelijkheid van ongeldige invoergegevens, die wordt genegeerd:

s0 = s1 = s2 = 0;

voor { ik in [0:len(A)) } {
v=A[i];
als (!isnan(v)) {
s0 = s0 + 1;
s1 = s1 + v;
s2 = s2 + v*v;
}
};

als (s0 > 1) {
sqrt((s2 - s1*s1/s0) / (s0-1));
}
else {
NaN;
};

De laatste if kan worden gewijzigd om 0 terug te geven als s0 > 0 is maar <= 1. We laten ook de curly vallen
haakjes, maar dan mag er geen ";" staan tussen de als en de anders

als (s0 > 1)
sqrt((s2 - s1*s1/s0) / (s0-1))
anders als (s0 > 0)
0
anders
NaN

Als we zowel het gemiddelde als de standaarddeviatie willen, kunnen we de gebruiken -outfile keuze,
het commando aanroepen met

minccalc -expfile stdev \
-outfile mean mean.mnc \
-outfile stdev stdev.mnc \
infile1.mnc infile2.mnc ...

En met behulp van het expressiebestand (met nog een andere vorm van if-expressie):

s0 = s1 = s2 = 0;

voor {i in [0:len(A))} {
v=A[i];
als (!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;
gemiddelde = (s0 > 0) ? s1 / s0 : NaN ;

WAARSCHUWINGEN


Een paar dingen die je moet onthouden...

Vectorvariabelen moeten beginnen met een hoofdletter.

Namen van vectorvariabelen mogen niet een van de functiesleutelwoorden zijn,
som, len, prod, ... etc

For-lussen en if-expressies moeten altijd worden gescheiden van de volgende expressie door a
puntkomma.

De symbolentabel is globaal.

Booleaanse operatoren && en || evalueer altijd beide operanden.

Een opmerking over parallellisme: om efficiëntieredenen worden evaluaties op veel voxels tegelijk uitgevoerd
(het aantal voxels wordt de breedte van de evaluatie genoemd en wordt gewijzigd met
het -eval_width optie). Een vreemd gevolg hiervan is dat beide zijden van een if-else
statement worden altijd geëvalueerd (tenzij alle voxels hetzelfde testresultaat geven), maar
uitspraken binnen elke consequent worden alleen geëvalueerd op de juiste voxels. In
in het bijzonder worden vermeldingen in de symbooltabel alleen gewijzigd volgens een voxelmasker. EEN
neveneffect hiervan is dat elk vectorsymbool in een if-else consequent niet mag veranderen
de lengte van het symbool (hoewel het het kan creëren) en beide zijden van de consequent moeten
overeenstemming bereiken over de lengte van alle vectorsymbolen die ze allebei wijzigen. Als dit niet duidelijk is,
probeer het gewoon - het programma zal klagen als het niet gelukkig is.

Gebruik minccalc online met onworks.net-services


Ad


Ad