For your ray tracer, I would recommend working with column vectors. This means that rather than storing a shape s array of vectors as a nested array which has shape s and contains 3-element vectors, you use a shape (3,s) array where each major cell corresponds to an axis. The advantage is that the cells are large and usually benefit from Dyalog's fast vector operations.
Looking at the three places where ray vectors are used, only small adjustments are needed to use column vectors: