NumPy 快速入门:数组创建、索引、运算与广播机制

小飞兽 NumPy/Pandas 8 次阅读 2026-07-29

NumPy(Numerical Python)是 Python 科学计算生态的基石,提供了高性能的多维数组对象 ndarray 以及大量数学函数。与 Python 原生的 list 相比,NumPy 数组在内存中连续存储,支持向量化运算,底层由 C/Fortran 实现,性能可提升数十倍乃至百倍。

一、NumPy 数组创建

import numpy as np

arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([[1, 2, 3], [4, 5, 6]])

zeros = np.zeros((3, 4))
ones = np.ones((2, 3))
full = np.full((2, 2), 99)
empty = np.empty((2, 3))

arange = np.arange(0, 10, 2)
linspace = np.linspace(0, 1, 5)

rng = np.random.default_rng()
rand_arr = rng.random((3, 3))
randn_arr = rng.standard_normal((2, 4))
randint_arr = rng.integers(1, 100, (5,))

print(arr2.shape, arr2.ndim, arr2.dtype, arr2.size)

二、数组索引与切片

a = np.arange(1, 13).reshape(3, 4)
print(a)

[[ 1 2 3 4]


[ 5 6 7 8]


[ 9 10 11 12]]

print(a[0])
print(a[1, 2])
print(a[-1])
print(a[0:2])
print(a[:, 0])
print(a[::2, ::2])

b = np.array([3, 7, 2, 8, 5])
print(b[b > 4])

c = np.array([10, 20, 30, 40, 50])
c[c < 30] = 0
print(c)

d = np.arange(100, 110)
print(d[[0, 3, 5]])

三、向量化运算与广播

a = np.array([1, 2, 3, 4])
b = np.array([10, 20, 30, 40])
print(a + b)
print(a * 2)
print(a ** 2)
print(a > 2)

angles = np.array([0, np.pi/2, np.pi])
print(np.sin(angles))

c = np.arange(1, 10).reshape(3, 3)
print(c.sum())
print(c.sum(axis=0))
print(c.sum(axis=1))
print(c.mean())

A = np.array([[1, 2, 3], [4, 5, 6]])
br = np.array([10, 20, 30])
print(A + br)

M1 = np.array([[1, 2], [3, 4]])
M2 = np.array([[5, 6], [7, 8]])
print(M1 @ M2)

四、常见问题

Q1:np.arange 和 np.linspace 有什么区别?
arange(start, stop, step) 类似 Python 的 range,不包含 stop 值。linspace(start, stop, num) 在 start 和 stop 之间均匀分布 num 个点,包含 stop 值。

Q2:数组的视图(view)和副本(copy)有何区别?
切片和某些操作返回的是视图,与原数组共享底层数据,修改视图会影响原数组。arr.copy() 返回独立副本。

Q3:广播失败的原因是什么?
从右侧对齐形状维度,只有在维度相等或其中一个为 1 时才能兼容。

五、延伸阅读