mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6mobile wallpaper 7mobile wallpaper 8mobile wallpaper 9mobile wallpaper 10mobile wallpaper 11mobile wallpaper 12mobile wallpaper 13mobile wallpaper 14mobile wallpaper 15mobile wallpaper 16mobile wallpaper 17mobile wallpaper 18mobile wallpaper 19mobile wallpaper 20mobile wallpaper 21mobile wallpaper 22mobile wallpaper 23
1540 字
4 分钟
笔记|数据分析学习笔记04|ndarray的创建

本系列所有文章都放在数据科学标签,总目录如下:

合集|数据分析学习笔记|系列总目录

上一篇:笔记|数据分析学习笔记03|ndarray的特性与属性

NumPy 提供了丰富的方法来创建 ndarray,根据使用场景的不同,可以分为以下几大类:

用途方法
基础构造np.array()np.copy()
预定义形状填充np.zeros()np.ones()np.empty()np.full()
基于数值范围生成np.arange()np.linspace()np.logspace()
特殊矩阵生成np.eye()np.diag()
随机数组生成np.random.rand()np.random.randn()np.random.randint()

下面逐一介绍这些创建方法。


4.1 基础构造#

4.1.1 np.array()#

np.array() 是最基础的创建方法,可以从 Python 列表、元组等序列对象创建 ndarray。

import numpy as np
list1 = [4, 5, 6]
arr = np.array(list1, dtype=np.float64) # 指定数据类型
print(arr.ndim) # 属性和方法的区分:是否带括号,带括号的是方法,不带括号的是属性
print(arr)

输出:

1
[4. 5. 6.]

通过 dtype 参数可以指定数组的元素类型。上述代码中,虽然列表元素是整数,但指定 dtype=np.float64 后,数组元素被转换为浮点型。

4.1.2 np.copy()#

np.copy() 用于创建一个与原数组内容相同但相互独立的新数组。修改新数组不会影响原数组。

arr1 = np.copy(arr) # 元素跟原始的数组相同,但是不是一个数组了
print(arr1)
arr1[0] = 8
print(arr1)
print(arr) # 原始数组不变

输出:

[4. 5. 6.]
[8. 5. 6.]
[4. 5. 6.]

np.copy() 执行的是深拷贝,新数组与原数组在内存中完全独立。这与直接赋值(arr1 = arr)不同,直接赋值只是创建了一个引用,修改其中一个会影响另一个。


4.2 预定义形状填充#

这类方法用于快速初始化固定形状的数组,常用于数据占位和预处理。

4.2.1 np.zeros()#

创建一个全 0 数组。

arr = np.zeros((2, 3), dtype=int) # 创建一个2行3列的全0数组
print(arr)
print(arr.dtype)

输出:

[[0 0 0]
[0 0 0]]
int64
arr = np.zeros((200,), dtype=int) # 创建一个200个元素的全0数组
print(arr)

输出:

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0]

注意: shape 参数需要传入一个元组。一维数组的形状为 (200,),二维数组的形状为 (2, 3)

4.2.2 np.ones()#

创建一个全 1 数组。

arr = np.ones((5, 8), dtype=int) # 创建一个5行8列的全1数组
print(arr)

输出:

[[1 1 1 1 1 1 1 1]
[1 1 1 1 1 1 1 1]
[1 1 1 1 1 1 1 1]
[1 1 1 1 1 1 1 1]
[1 1 1 1 1 1 1 1]]

4.2.3 np.empty()#

创建一个未初始化的数组。由于不需要填充初始值,执行效率比 np.zeros() 更快。

arr = np.empty((4, 3)) # 创建一个4行3列的未初始化数组,执行效率快
print(arr)

输出:

[[1.31228284e-311 2.47032823e-322 0.00000000e+000]
[0.00000000e+000 8.06630440e-308 2.92966904e-033]
[4.71483083e-090 9.76836074e+165 1.55155023e+184]
[9.95849747e-047 3.99910963e+252 2.32253274e-056]]

数组中的值是内存中的随机垃圾值,在使用前需要先赋值覆盖。适用于后续会完全填充数据的场景。

4.2.4 np.full()#

创建一个指定形状并填充固定值的数组。

arr = np.full((3, 4), 2026) # 创建一个3行4列的全2026数组
print(arr)

输出:

[[2026 2026 2026 2026]
[2026 2026 2026 2026]
[2026 2026 2026 2026]]

4.2.5 基于已有形状的快捷方法#

NumPy 还提供了 _like 系列方法,可以创建与已有数组形状相同的新数组:

arr1 = np.zeros_like(arr) # 创建一个与arr形状相同的全0数组
print(arr1)
arr1 = np.empty_like(arr) # 创建一个与arr形状相同的未初始化数组
print(arr1)
arr1 = np.ones_like(arr) # 创建一个与arr形状相同的全1数组
print(arr1)
arr1 = np.full_like(arr, 2025) # 创建一个与arr形状相同的全2025数组
print(arr1)

输出:

[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
[[ 2656090036200 50 0
0]
[ 31244147616645120 4120349891991070059 3270516458839762277
7090130557940611385]
[7362600585106894132 3918748936486401889 8386112019185938739
7233687420873831285]]
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
[[2025 2025 2025 2025]
[2025 2025 2025 2025]
[2025 2025 2025 2025]]

_like 系列方法在需要创建与某个数组形状一致的占位数组时非常方便,无需手动指定 shape


4.3 基于数值范围生成#

这类方法用于生成数值序列,常用于模拟时间序列、坐标网格等。

4.3.1 np.arange()#

生成等差数列,用法类似 Python 内置的 range(),但返回的是 ndarray。

arr = np.arange(2, 12, 2) # start, stop(不取), step
print(arr)

输出:

[ 2 4 6 8 10]

参数说明:start 为起始值,stop 为终止值(不包含),step 为步长。

4.3.2 np.linspace()#

生成等间隔数列,与 np.arange() 的区别在于:np.linspace() 的第三个参数是元素个数(而非步长),且默认包含终止值

arr = np.linspace(0, 100, 5) # start, stop(取), num
print(arr)

输出:

[ 0. 25. 50. 75. 100.]

在 0 到 100 之间均匀生成 5 个元素,间隔为 25。

指定数据类型:

arr = np.linspace(0, 100, 5, dtype=int)
print(arr)
arr = np.arange(0, 101, 25, dtype=int)
print(arr)

输出:

[ 0 25 50 75 100]
[ 0 25 50 75 100]

通过指定 dtype=int,可以让 np.linspace()np.arange() 产生相同的结果。

4.3.3 np.logspace()#

生成对数间隔数列。先将指数等间隔分布,然后以指定底数取幂。

arr = np.logspace(0, 4, 3, base=2, dtype=int) # 先把指数等间隔分布在0-4之间,然后以2为底取幂
print(arr)

输出:

[ 1 4 16]

解释:指数在 0 到 4 之间等间隔取 3 个值,即 0、2、4。然后计算 20=12^0=122=42^2=424=162^4=16


4.4 特殊矩阵生成#

4.4.1 np.eye()#

创建单位矩阵(主对角线上的数字为 1,其余为 0)。

arr = np.eye(3, 4, dtype=int)
print(arr)

输出:

[[1 0 0 0]
[0 1 0 0]
[0 0 1 0]]

参数说明:第一个参数为行数,第二个参数为列数。当行数和列数相等时,生成的是标准单位矩阵;不等时,生成的是广义的单位矩阵。

4.4.2 np.diag()#

创建对角矩阵(主对角线上是非零数字,其余为 0)。

arr = np.diag([1, 2, 3]) # 创建一个对角矩阵
print(arr)

输出:

[[1 0 0]
[0 2 0]
[0 0 3]]

传入一个一维数组,np.diag() 会将其元素放置在新数组的主对角线上。


4.5 随机数组生成#

随机数组生成常用于模拟实验数据、初始化神经网络权重等场景。NumPy 的 random 模块提供了多种随机数生成方法。

4.5.1 np.random.rand()#

生成 0 到 1 之间的随机浮点数,服从均匀分布。

arr = np.random.rand(2, 3)
print(arr)

输出(结果随机):

[[0.4974305 0.00461739 0.7830449 ]
[0.35404588 0.65308817 0.99276538]]

4.5.2 np.random.uniform()#

生成指定范围区间的随机浮点数,服从均匀分布。

arr = np.random.uniform(3, 6, (2, 3)) # 生成2行3列的随机浮点数,范围在3到6之间
print(arr)

输出(结果随机):

[[3.71807012 3.88918494 4.92140544]
[5.65113597 5.43057318 5.76969752]]

参数说明:第一个参数为下界,第二个参数为上界,第三个参数为数组形状。

4.5.3 np.random.randint()#

生成指定范围区间的随机整数。

arr = np.random.randint(3, 30, (2, 3)) # 生成2行3列的随机整数,范围在3到30之间
print(arr)

输出(结果随机):

[[ 5 9 6]
[24 23 6]]

参数说明:第一个参数为下界(包含),第二个参数为上界(不包含),第三个参数为数组形状。

4.5.4 np.random.randn()#

生成服从标准正态分布(均值为 0,标准差为 1)的随机数列,数值基本在 -3 到 3 之间,两边概率小,中间概率大。

arr = np.random.randn(2, 3) # 生成2行3列的随机数,服从标准正态分布
print(arr)

输出(结果随机):

[[-0.92029395 0.6566202 0.00439262]
[ 1.92088964 1.7643093 0.92341786]]

4.5.5 设置随机种子#

使用 np.random.seed() 可以设置随机种子,使得每次生成的随机数序列相同,便于实验复现。

np.random.seed(20)
arr = np.random.randint(1, 10, (2, 5))
print(arr)

输出:

[[4 5 7 8 3]
[1 7 9 6 4]]

设置相同的随机种子后,每次运行生成的随机数序列完全一致。这在需要复现实验结果时非常有用。


4.6 本节小结#

本节完成了以下内容:

  • 介绍了 np.array()np.copy() 的基础构造方法
  • 讲解了预定义形状填充方法:np.zeros()np.ones()np.empty()np.full() 及其 _like 系列
  • 学习了基于数值范围生成的方法:np.arange()np.linspace()np.logspace()
  • 了解了特殊矩阵的生成方法:np.eye()np.diag()
  • 掌握了随机数组的生成方法:np.random.rand()np.random.uniform()np.random.randint()np.random.randn() 以及随机种子的设置

下一节我们将学习 ndarray 的元素数据类型。

下一篇:笔记|数据分析学习笔记05|ndarray的数据类型


分享

如果这篇文章对你有帮助,欢迎分享给更多人!

笔记|数据分析学习笔记04|ndarray的创建
https://luq-blog.xyz/posts/2026-07-01-data-notes-04-ndarray-creation/
作者
Luquiescene
发布于
2026-07-01
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录