tensor as a multidimensional array
Once you fix bases, a tensor becomes a multidimensional array of numbers indexed by several subscripts: a vector is a 1-way array (a list), a matrix is a 2-way array (a grid), and an order-3 tensor T[i,j,k] is a cube of numbers. This is the data-science picture, the one underneath software like NumPy or PyTorch, where 'tensor' just means 'n-dimensional array'.
The vocabulary names how you slice the cube. A MODE (or way) is one of the axes; an order-3 tensor has three modes. A FIBER is what you get by fixing all indices but one — the higher-order analog of a matrix's rows and columns (a column is a mode-1 fiber). A SLICE fixes one index and lets the other two run, giving a matrix face of the cube.
Reshaping operations move between these views. Unfolding (matricization) flattens a tensor into a matrix by stacking fibers, which lets you apply ordinary matrix tools mode by mode. Vectorization stacks everything into one long column. These are bookkeeping, not new math, but they are how decompositions like CP and Tucker are actually computed.
Be honest about what the array view drops. The bare array is just coordinates; it only becomes a true tensor when you also say how the entries transform under a change of basis. A NumPy array with no transformation law is not a tensor in the physics sense — it is a container. The coordinate-free object and its array of components are related the same way an abstract vector relates to its column of numbers.
An order-3 tensor is a cube of numbers; its modes are the three axes i, j, k.
Storage grows as the product of the mode sizes: an n x n x n tensor holds n^3 numbers. This curse of dimensionality is exactly why low-rank tensor formats (CP, Tucker, tensor trains) matter — they store far fewer numbers than the raw cube.