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.

Features

Indexing

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 "threading" 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>

  • Linux Journal Review
  • Yorick tutorial on JehTech