# Subarray

*The term sub-array may also be used to refer part of an array with lesser rank (i.e. a cell) or depth.*

A **subarray** (or **sub-array**) of an array is another array which can be formed by selecting a contiguous section along each axis. The subarrays of an array are all those that result from indexing that array by a full set of index arrays each of which is either a scalar or a vector of sequential indices. The term subarray is used loosely in APL and rarely defined directly. Depending on context, scalar indices may be allowed only for leading axes or not at all. If scalar indices are not allowed than a subarray shares every axis with the array that contains it and has equal rank to it; we might call such subarrays *equal-rank* subarrays. Otherwise a subarray has rank less than or equal to its containing array.

A vector subarray of a vector is a subvector. In languages outside of the APL family which have only 1-dimensional arrays, "subarray" may have this meaning: for example, the maximum subarray problem is usually taken to apply to 1-dimensional arrays only. The term "slice" may also be used to refer to a subvector outside of APL.

The Find (`⍷`

) function searches for occurrences of the left argument as a subarray of the right argument. For Find, a subarray may have leading axes dropped but not others. We might also say that Find searches for the left argument after extending its shape with leading 1s, or that it searches for the left argument as a subarray of any equal-rank cell of the right argument.

```
⎕←A ← 5 4⍴⎕A
ABCD
EFGH
IJKL
MNOP
QRST
(2 3⍴'FGHJKL') ⍷ A
0 0 0 0
0 1 0 0
0 0 0 0
0 0 0 0
0 0 0 0
'MN' ⍷ A ⍝ Found in a row
0 0 0 0
0 0 0 0
0 0 0 0
1 0 0 0
0 0 0 0
'CGKO' ⍷ A ⍝ Not found in a column
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
(⍪'CGKO') ⍷ A ⍝ Found after adding last axis
0 0 1 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
```

Special types of equal-rank subarrays include:

- Prefixes and suffixes
- The result of Drop compared to its argument, and Take when it does not overtake

General subarrays include:

- Cells of an array
- Hyperplanes of an array

Reduction and the related operators Scan and Windowed Reduction reduce along 1-dimensional subarrays of the right argument. The vectors used in a particular reduction can be formed by taking a scalar index along each axis except the reduction axis, and selecting from the reduction axis according to the operator used. For a reduction the entire axis is used while for scans prefixes are used and windowed reductions take subsections of the length specified by the left argument.

APL features [edit]
| |
---|---|

Built-ins | Primitives (functions, operators) ∙ Quad name |

Array model | Shape ∙ Rank ∙ Depth ∙ Bound ∙ Index (Indexing) ∙ Axis ∙ Ravel ∙ Ravel order ∙ Element ∙ Scalar ∙ Vector ∙ Matrix ∙ Simple scalar ∙ Simple array ∙ Nested array ∙ Cell ∙ Major cell ∙ Subarray ∙ Empty array ∙ Prototype |

Data types | Number (Boolean, Complex number) ∙ Character (String) ∙ Box ∙ Namespace ∙ Function array |

Concepts and paradigms | Conformability (Scalar extension, Leading axis agreement) ∙ Scalar function (Pervasion) ∙ Identity element ∙ Complex floor ∙ Total array ordering ∙ Tacit programming (Function composition, Close composition) ∙ Glyph |

Errors | LIMIT ERROR ∙ RANK ERROR ∙ SYNTAX ERROR ∙ DOMAIN ERROR ∙ LENGTH ERROR ∙ INDEX ERROR ∙ VALUE ERROR |