Every machine learning framework is NumPy shaped. PyTorch tensors, JAX arrays, TensorFlow tensors, they all borrowed the same conventions for shapes, indexing and broadcasting because NumPy got them right and everything since has followed. Which means the time you spend understanding NumPy properly pays out in every framework you touch afterwards, and the time you do not spend shows up as a shape mismatch error at eleven at night that you fix by adding an unsqueeze and hoping. The broadcasting documentation is the reason to be here.
Broadcasting is the set of rules that decides what happens when you operate on arrays of different shapes, and it is the single most common source of confusion in numerical Python. Not because the rules are complicated, they are about four sentences long, but because almost nobody has read them and everybody relies on pattern matching from examples instead. The official page states the rules plainly, works through the cases including the ones that surprise people, and shows where a broadcast succeeds and silently produces something you did not intend. That last category is the dangerous one.
A shape error is annoying and it stops you. A successful broadcast into the wrong shape produces a number, and the number is wrong, and nothing tells you. Reading this page carefully is one of the highest return hours available to anyone doing numerical work. The array fundamentals section is the other essential piece.
It explains what an array actually is, how it is laid out in memory, what a view is versus a copy, what contiguity means, why some operations are free and others allocate. This is the material that explains why your code is slow and why modifying a slice changed the original, and both of those are things people work around for years without understanding. The absolute beginners guide is a genuine effort at meeting people where they are, which is rarer than it should be in scientific Python documentation. It starts from the assumption that you know some Python and nothing about arrays, and it builds up carefully with small examples.
If you are starting from zero this is the right entry point and it will get you to competent basic usage in an afternoon. The reference is precise, which matters in numerical code more than in most places. When you need to know exactly what happens with a particular dtype at a boundary, or what the axis argument does on a function you rarely use, or whether an operation preserves the array's memory order, the answer is there and it is correct. Now the criticisms.
It is dry. There is no attempt to be engaging and the applied tutorial section, which is where the interesting worked examples live, is small and inconsistent in quality. Some tutorials are excellent and others are unfinished in feel. Compared to the pandas user guide, which reads like something written to teach, this reads like something written to specify.
Both are legitimate and one is more pleasant to learn from. The gap between the beginners guide and the reference is a real problem. The beginners guide ends before you are competent and the reference assumes you already are, and the fundamentals section that bridges them is not signposted as the bridge. Someone working through this in order will finish the beginners guide, open the reference, and bounce.
Tell people to read the fundamentals section next, because the documentation does not. Numerical pitfalls are barely covered and they should be central. Floating point accumulation error in large sums, catastrophic cancellation, why you should not compare floats for equality, integer overflow in fixed width types, why the order of operations changes your result. These cause real bugs in real machine learning code, they are specific to numerical work, and the documentation treats them as out of scope.
A page on this would be worth more than half the reference. The linear algebra section documents the functions and assumes the mathematics. That is a defensible boundary and it means someone who does not already understand what a singular value decomposition is will learn nothing here about when to use one. Fine for a reference, worth knowing before you arrive expecting to learn.
And there is nothing connecting this to the frameworks people are actually using. The conventions transfer almost perfectly to PyTorch, the mental model is the same, and not one page says so. A short guide mapping NumPy concepts onto tensor operations would help an enormous number of people and does not exist here. My four out of five is for documentation that contains two or three genuinely essential pages surrounded by a competent and joyless reference.
Read broadcasting, read indexing, read array fundamentals. Skip the rest until you need it, and know that those three will keep paying you back in every framework you use for the rest of your career.