Python NumPy创建数组的7种核心方法详解

拾柒
拾柒
发布时间:2026-10-16| 6人浏览过
原创

本文系统介绍Python Num库中创建数组的七种主要方法,涵盖蛮力构造、特殊数值填充、随机分布生成、定长分割、重复扩展、网格构建及自定义数据类型。通过具体代码示例解析参数用法与内存布局,帮助开发者高效掌握NumPy数组初始化的核心技巧。

1. 蛮力构造法

np.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
import numpy as np

# 如果不指定数据类型,就会根据object参数自动选择合适的数据类型
a = np.array([[1, 2, 3], [4, 5, 6]])
# 也可以在创建数组时,指定元素的数据类型
b = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.uint8)

2. 特殊数值法

所谓特殊数值,主要指0、1以及空值。这种方法适用于构建全零数组、全一数组、空数组,或者生成类似单位矩阵的结构(即主对角线元素为1,其余位置为0的数组)。

np.zeros(shape, dtype=float, order='C')
np.ones(shape, dtype=float, order='C')
np.empty(shape, dtype=float, order='C')
np.eye(N, M=None, k=0, dtype=float, order='C')

参数shape用于定义生成数组的形状结构,可选参数dtype则指定数组元素的数据类型,默认值为浮点型。order参数决定了数组在内存中的存储顺序:'C'代表C语言风格的行优先存储方式,而'F'则对应Fortran语言风格的列优先存储方式。

import numpy as np

print(np.zeros(6))
print(np.zeros((2, 3)))
print(np.ones((2, 3), dtype=int))
print(np.empty((2, 3)))
print(np.eye(3, dtype=np.uint8))

假设需要创建一个3行4列的数组,所有初始值均为255,且数据类型为无符号整型。

  • 方案1:先创建全1数组,然后乘以255。
  • 方案2:先创建全0数组,然后加上255。
  • 方案3:利用填充函数fill()直接设置值。
import numpy as np

a = np.empty((3, 4), dtype=np.uint8)
a.fill(255)
print(a)

3. 随机数值法

np.random.random(size=None)
np.random.randint(low, high=None, size=None)
np.random.normal(loc=0.0, scale=1.0, size=None)

函数random()用于生成区间[0,1)内的随机浮点数;函数randint()用于生成区间[low,high)内的随机整数数组。参数size是一个元组,用于指定生成数组的具体结构尺寸。

import numpy as np

print(np.random.random(3))
print(np.random.random((2, 3)))
print(np.random.randint(5))
print(np.random.randint(1, 5, size=(2, 3)))

函数normal()用于生成服从正态分布的数组,其中loc参数指定均值,scale参数指定标准差。

import numpy as np
# 导入绘图模块
import matplotlib.pyplot as plt

# 生成正态分布数据
tall = np.random.normal(170, 4, 1000)
# 从156厘米到190厘米,每2厘米一个分段
bins = np.arange(156, 190, 2)
# 绘制柱状图
plt.hist(tall, bins)
# 显示图形
plt.show()

4. 定长分割法

import numpy as np

np.arange(start, stop, step, dtype=None)
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

函数arange()的功能与Python内置的range()函数类似,但它额外支持接收浮点数作为参数。

import numpy as np

print(np.arange(5))
print(np.arange(5, 11))
print(np.arange(5, 11, 2))
print(np.arange(5.5, 11, 1.5))
print(np.arange(3, 15).reshape(3, 4))

函数linspace()需要三个关键参数:起点、终点以及返回元素的个数。函数linspace()生成的序列默认包含起点和终点,用户可以通过设置endpoint参数来决定是否排除终点。

import numpy as np

# 返回0到5之间的5个等距数值,包括0和5
print(np.linspace(0, 5, 5))
# 返回5个等距数值,包括0但不包括5
print(np.linspace(0, 5, 5, endpoint=False))

5. 重复构造法

函数repeat()用于重复数组中的元素。然而,如果被操作的数组是多维数组,且函数repeat()指定了axis参数,处理逻辑会变得相对复杂。

import numpy as np

a = np.arange(5)
print(a)
# 重复一维数组元素3次
print(np.repeat(a, 3))
a = np.arange(6).reshape((2, 3))
print(a)
# 重复二维数组元素3次,不指定轴
print(np.repeat(a, 3))
# 重复二维数组元素3次,指定0轴
print(np.repeat(a, 3, axis=0))
# 重复二维数组元素3次,指定1轴
print(np.repeat(a, 3, axis=1))

函数tile()的作用是将整个数组作为一个整体,在水平和垂直方向上重复指定的次数。

import numpy as np

a = np.arange(5)
print(a)
# 重复一维数组3次
print(np.tile(a, 3))
# 重复一维数组3行2列
print(np.tile(a, (3, 2)))
a = np.arange(6).reshape((2, 3))
print(a)
# 重复二维数组3次
print(np.tile(a, 3))
# 重复二维数组2行3列
print(np.tile(a, (2, 3)))

6. 网格构造法

表示经纬度网格的第一种方式:使用两个一维数组。利用定长分割函数linspace(),将经度范围从-180°到180°划分为间隔为10°的37个点,同时将纬度范围从90°到-90划分为间隔为10°的19个点,从而得到两个独立的一维数组。

import numpy as np

# 精度为10°,共计37个经度点
lon = np.linspace(-180, 180, 37)
# 精度为10°,共计19个纬度点
lat = np.linspace(90, -90, 19)

表示经纬度网格的第二种方式:使用两个二维数组分别表示经度网格和纬度网格。在经度网格中,每一列的元素值相同(代表同一经度);在纬度网格中,每一行的元素值相同(代表同一纬度)。生成这种二维经纬度网格的常用函数是np.meshgrid(),它接收一维经度数组lon和一维纬度数组lat作为输入,返回对应的二维经度数组和纬度数组。

import numpy as np

# 精度为10°,共计37个经度点
lon = np.linspace(-180, 180, 37)
# 精度为10°,共计19个纬度点
lat = np.linspace(90, -90, 19)

lons, lats = np.meshgrid(lon, lat)
print(lons.shape)
print(lats.shape)
print(lons[:,0])
print(lons[0])

除了使用np.meshgrid()函数外,构造经纬度网格还有另一种更强大的方法。该方法可以直接生成纬度网格和经度网格,无需依赖预先构建的一维数组(注意:参数顺序中纬度在前,经度在后)。

import numpy as np

# 使用实数指定网格经度为5°
lats, lons = np.mgrid[90:-91:-5, -180:181:5]
print(lons.shape, lats.shape)
# 也可以用虚数指定分隔点数
lats, lons = np.mgrid[90:-90:37j, -180:180:73j]
print(lons.shape, lats.shape)

7. 自定义数据类型

运行结果显示:NumPy会将所有元素的数据类型统一转换为'<U32'类型。其中,U标识Unicode字符串;<表示字节序为小端模式(即低位字节存储在最小地址中);数字32表示数组元素占用32字节,具体字节数由所有元素中最长的那个元素决定。

import numpy as np

print(np.array(['Anne', 1.70, 55]).dtype)

若希望在数组中保留生成数组时列表中的原始元素类型,则需要使用自定义数据类型。这种机制类似于C语言中的结构体定义。

其具体实现代码如下:

import numpy as np

mytype = np.dtype([('name', 'S32'), ('tall', np.float), ('bw', np.int)])
print(np.array([('Anne', 1.70, 55)], dtype=mytype))
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。