Template:Multiple issues

Template:Infobox programming language

Yorick is an interpreted programming language designed for numerics, graph plotting, and steering large scientific simulation codes. It is quite fast due to array syntax, and extensible via C or Fortran routines. It was created in 1996 by David H. Munro of Lawrence Livermore National Laboratory.

FeaturesEdit

IndexingEdit

Yorick is good at manipulating elements in N-dimensional arrays conveniently with its powerful syntax.

Several elements can be accessed all at once:

<syntaxhighlight lang="rout"> > x=[1,2,3,4,5,6]; > x [1,2,3,4,5,6] > x(3:6) [3,4,5,6] > x(3:6:2) [3,5] > x(6:3:-2) [6,4] </syntaxhighlight>

Arbitrary elements

<syntaxhighlight lang="rout"> > x=[[1,2,3],[4,5,6]] > x [[1,2,3],[4,5,6]] > x([2,1],[1,2]) [[2,1],[5,4]] > list=where(1<x) > list [2,3,4,5,6] > y=x(list) > y [2,3,4,5,6] </syntaxhighlight>

Pseudo-index

Like "theading" in PDL and "broadcasting" in Numpy, Yorick has a mechanism to do this:

<syntaxhighlight lang="rout"> > x=[1,2,3] > x [1,2,3] > y=[[1,2,3],[4,5,6]] > y [[1,2,3],[4,5,6]] > y(-,) [[[1],[2],[3]],[[4],[5],[6]]] > x(-,) [[1],[2],[3]] > x(,-) 1,2,3 > x(,-)/y [[1,1,1],[0,0,0]] > y=[[1.,2,3],[4,5,6]] > x(,-)/y [[1,1,1],[0.25,0.4,0.5]] </syntaxhighlight>

Rubber index

".." is a rubber-index to represent zero or more dimensions of the array.

<syntaxhighlight lang="rout"> > x=[[1,2,3],[4,5,6]] > x [[1,2,3],[4,5,6]] > x(..,1) [1,2,3] > x(1,..) [1,4] > x(2,..,2) 5 </syntaxhighlight>

"*" is a kind of rubber-index to reshape a slice(sub-array) of array to a vector.

<syntaxhighlight lang="rout"> > x(*) [1,2,3,4,5,6] </syntaxhighlight>

Tensor multiplication

Tensor multiplication is done as follows in Yorick:

P(,+, )*Q(, +)

means <math>\sum_{j=1}^{j=N}{P_{ijkl}Q_{mnj}}</math>

<syntaxhighlight lang="rout"> > x=[[1,2,3],[4,5,6]] > x [[1,2,3],[4,5,6]] > y=[[7,8],[9,10],[11,12]] > x(,+)*y(+,) [[39,54,69],[49,68,87],[59,82,105]] > x(+,)*y(,+) [[58,139],[64,154]] </syntaxhighlight>

External linksEdit

Template:Lawrence Livermore National Laboratory