We build arrays from lists with np.array and from helpers like zeros, ones, full, empty, arange, linspace, and eye — the difference between a shallow setup and meaningful initial values, when to use integer versus float dtypes, and how to read array creation errors. We then read every ndarray through shape, ndim, size, and dtype, connect memory layout and row-major order to what happens when you slice later, and see why a (1000, 1) array is not the same object as a (1000,) vector in downstream APIs, including how to interpret nbytes for large workloads. Practice turning nested lists into 2D arrays, generating evenly spaced values, and inspecting arrays you create.