网易首页 > 网易号 > 正文 申请入驻

NumPy 函数手册:数组创建

0
分享至

在 NumPy 中,数组(ndarray)是所有数值计算的核心数据结构。几乎所有计算操作,都以数组作为输入或输出。因此,理解数组的创建方式,是学习 NumPy 的基础。

NumPy 提供了多种创建数组的函数。这些函数不仅可以从 Python 对象构造数组,还可以按固定值初始化数组、按数值序列生成数组、根据已有数组形状构造新数组,或生成具有特定结构的矩阵与网格。

从创建方式来看,NumPy 的数组创建函数通常可以分为八类:

(1)从对象或现有数据构造

(2)初始化与占位创建

(3)按已有数组模板创建

(4)按数值序列创建

(5)按结构规则创建

(6)网格与坐标创建

(7)按函数规则创建

(8)按随机数分布创建

需要注意的是,NumPy 的随机数函数也可以生成数组,但由于其涉及随机数生成器与概率分布机制,通常在随机数模块中单独介绍。

一、从对象或现有数据构造

array()

从 Python 对象创建一个新的 ndarray。

numpy.array(object, dtype=None, copy=True, order='K', ndmin=0)

参数说明:

• object:Python 序列(如 list、tuple)或其他数组对象

• dtype:指定数组元素的数据类型

• copy:是否复制数据

• order:指定内存布局方式

'K':尽量保持输入数组的内存布局

• ndmin:指定最小维度

示例:

arr2 = np.array([[4, 8, 6], [5, 3, 7]])

asarray()

将输入对象转换为 ndarray。如果输入对象本身已经是 ndarray,通常不会复制数据。

numpy.asarray(a, dtype=None, order=None)

参数说明:

• a:输入对象

• dtype:指定数组元素的数据类型

• order:指定内存布局方式

示例:

arr = np.asarray(lst)

asanyarray()

与 asarray() 类似,但如果输入是 ndarray 的子类(如 matrix),则保留其子类类型。

numpy.asanyarray(a, dtype=None, order=None)

示例:

print(type(b))

输出:

解释:

MaskedArray 是 ndarray 的一个子类,用于表示带有缺失值或无效值的数据。

copy()

创建数组的副本,返回一个新的 ndarray。

numpy.copy(a, order='K')

参数说明:

• a:要复制的数组

• order:指定内存布局方式

示例:

arr2 = np.copy(arr1)

fromiter()

从可迭代对象逐个读取元素并创建数组。

numpy.fromiter(iterable, dtype, count=-1)

参数说明:

• iterable:可迭代对象

• dtype:输出数组的数据类型(必填)

• count:读取元素个数(-1 表示读到迭代结束)

示例:

# [0 1 4 9 16]

frombuffer()

从缓冲区对象(buffer)读取数据并创建数组。

numpy.frombuffer(buffer, dtype=float, count=-1, offset=0)

参数说明:

• buffer:提供数据的缓冲区对象

• dtype:指定缓冲区数据的解释类型,默认为 float

• count:读取元素的数量,-1 表示读取所有数据

• offset:从缓冲区的哪个字节开始读取

示例 1:从 bytes 创建数组

# [1 2 3 4]

示例 2:解释为 16 位整数

# [1 2 3 4]

说明:frombuffer() 用于将原始二进制数据直接解释为 NumPy 数组。它不复制数据,因此效率很高,常用于处理二进制文件、内存数据或网络数据流。

fromfile()

从二进制文件或文本文件中读取数据并创建数组。

numpy.fromfile(file, dtype=float, count=-1, sep='', offset=0)

参数说明:

• file:文件对象或文件路径字符串

• dtype:读取数据的数据类型,默认 float

• count:读取元素个数,默认 -1 表示读取全部数据

• sep:分隔符

若指定分隔符(如 ' ' 或 ','),则按文本解析

• offset:从文件的哪个字节位置开始读取(仅适用于二进制模式)

示例 1:读取二进制数据

arr = np.fromfile("data.bin", dtype=np.int32)

示例 2:读取文本数据

arr = np.fromfile("data.txt", dtype=int, sep=' ')

fromfile() 可以直接从文件中读取数据创建数组,效率较高,但生成的文件格式缺乏跨平台兼容性,因此在实际工程中更常使用 np.load() / np.save() 等 NumPy 专用格式。

fromstring()

从字符串中解析数据并创建数组。

numpy.fromstring(string, dtype=float, count=-1, sep='')

参数说明:

• string:包含数据的字符串或字节对象

• dtype:输出数组的数据类型,默认 float

• count:读取元素个数,默认 -1 表示读取全部

• sep:分隔符

若指定分隔符,则按文本解析

示例 1:从字符串读取数值

# [1 2 3 4 5]

示例 2:解析逗号分隔数据

# [10 20 30 40]

fromstring() 常用于将文本数据快速转换为 NumPy 数组,但在处理复杂文本格式时,通常更推荐使用 np.loadtxt() 或 np.genfromtxt()。

二、初始化与占位创建

这一类函数用于创建指定形状的数组,并用某种默认值填充。

zeros()

创建一个元素全部为 0 的数组。

numpy.zeros(shape, dtype=float)

参数说明:

• shape:数组形状

• dtype:数组元素的数据类型

示例:

np.zeros((2, 3))

输出:

 [0. 0. 0.]]

ones()

创建一个元素全部为 1 的数组。

numpy.ones(shape, dtype=float)

示例:

np.ones((2, 3))

empty()

用于创建空数组(未初始化数组)。

numpy.empty(shape, dtype=float)

这种方式创建数组速度最快。但数组内容未初始化,其值来自内存中的残留数据,因此是不确定的。

示例:

np.empty((2, 2))

full()

创建数组并用指定值填充。

numpy.full(shape, fill_value, dtype=None)

示例:

np.full((2,3), 5)

输出:

 [5 5 5]]

三、按已有数组模板创建

zeros_like()

创建一个与数组 a 形状相同的全 0 数组。

numpy.zeros_like(a, dtype=None, order='K', subok=True, shape=None)

参数说明:

• a:参考数组(决定输出形状)

• dtype:指定输出类型(默认沿用 a)

• order:内存布局('C'/'F'/'A'/'K')

• subok:是否保留子类类型(默认 True)

• shape:指定输出形状(覆盖 a 的 shape,可选)

示例:

arr = np.zeros_like(a)

ones_like()

用于创建一个与数组 a 形状相同的全 1 数组。

numpy.ones_like(a, dtype=None, order='K', subok=True, shape=None)

示例:

arr = np.ones_like(a)

empty_like()

创建一个与数组 a 形状相同、但不初始化内容的数组(值不确定)。

numpy.empty_like(a, dtype=None, order='K', subok=True, shape=None)

示例:

b = np.empty_like(a)

full_like()

创建与数组 a 形状相同的数组,并用指定值填充。

numpy.full_like(a, fill_value, dtype=None, order='K', subok=True, shape=None)

示例:

np.full_like(a, 9)

四、按数值序列创建

arange()

生成等差序列数组,类似 range()。

numpy.arange([start,] stop[, step], dtype=None)

示例:

# [0 2 4 6 8]

linspace()

在指定区间内生成等间隔的数值。

numpy.linspace(start, stop, num=50, endpoint=True, dtype=None)

参数说明:

• start:序列起始值

• stop:序列结束值

• num:生成样本数量(默认 50)

• endpoint:是否包含结束值 stop(默认 True)

• dtype:返回数组的数据类型,默认根据输入自动推断(通常为 float)

示例:

# [0.   0.25 0.5  0.75 1.  ]

logspace()

生成对数间隔序列。

numpy.logspace(start, stop, num=50, endpoint=True, base=10.0)

参数说明:

• start:起始指数值

• stop:结束指数值

• num:生成元素个数(默认 50)

• endpoint:是否包含结束指数对应的值(默认 True)

• base:对数的底数(默认为 10)

示例:

# [1. 10. 100. 1000.]

geomspace()

生成等比数列。

numpy.geomspace(start, stop, num=50, endpoint=True, dtype=None)

参数说明:

• start:序列起始值

• stop:序列结束值

• num:生成元素个数(默认 50)

• endpoint:是否包含终点值 stop(默认 True)

• dtype:指定输出数组的数据类型

示例 1:

# [   1.   10.  100. 1000.]

示例 2:

# [ 1.  2.  4.  8. 16.]

说明:geomspace() 用于生成等比序列数组。与 linspace()(等差序列)和 logspace()(对数刻度序列)相比,它直接按照比例关系生成数据,常用于对数尺度计算和科学建模。

五、按结构规则创建

eye()

创建一个二维数组,其指定对角线上的元素为 1,其余元素为 0。

numpy.eye(N, M=None, k=0, dtype=float)

当 N == M 且 k=0 时,其结果是标准单位矩阵(identity matrix),即,是一个方阵,其主对角线元素为 1,其余元素为 0。

参数说明:

• N: 矩阵的行数

• M:矩阵的列数,默认与 N 相同

• k:对角线位置偏移量

0 表示主对角线,正数表示上对角线,负数表示下对角线。

示例:

np.eye(3)

输出:

 [0. 0. 1.]]

identity()

创建 n × n 单位矩阵。

numpy.identity(n, dtype=None)

示例:

np.identity(3)

tri()

创建一个下三角矩阵(lower triangular matrix)。

numpy.tri(N, M=None, k=0, dtype=float)

参数说明:

• N: 矩阵的行数

• M:矩阵的列数,默认与 N 相同

• k:对角线位置偏移量

0 表示主对角线,正数表示上移,负数表示下移。

示例:

print(a)

输出:

 [1. 1. 1.]]

tril()

返回数组 m 的下三角部分。

numpy.tril(m, k=0)

参数说明:

• m:输入数组(通常为二维矩阵)

• k:对角线偏移量

示例:

print(np.tril(a))

输出:

 [7 8 9]]

triu()

返回数组 m 的上三角部分。

numpy.triu(m, k=0)

示例:

print(np.triu(a))

输出:

 [0 0 9]]

diag()

从一维数组生成对角矩阵,或从二维数组提取指定对角线。

numpy.diag(v, k=0)

参数说明:

• v:一维向量(生成对角矩阵)或二维矩阵(提取对角线)

• k:对角线偏移(0 主对角线;正上负下)

示例 1:由向量生成对角矩阵

np.diag(v)

输出:

 [0 0 3]]

示例 2:从矩阵提取对角线

# [2 6]

diagflat()

将输入展平并生成对角矩阵。

numpy.diagflat(v)

示例:

np.diagflat([1,2,3])

输出:

 [0 0 3]]

六、网格与坐标创建

indices()

生成索引网格数组:返回一个形如 (ndim, ...) 的数组,表示每个维度的坐标索引。

numpy.indices(dimensions, dtype=int, sparse=False)

参数说明:

• dimensions:目标网格形状,如 (2, 3)

• dtype:输出类型(默认 int)

• sparse:是否返回稀疏网格(默认 False)

示例:

np.indices((3,3))

会生成两个数组:

  [0 1 2]]]

• 第一个矩阵 → 行索引

• 第二个矩阵 → 列索引

meshgrid()

将多个一维坐标数组转换为坐标网格矩阵。

numpy.meshgrid(*xi, indexing='xy', sparse=False, copy=True)

参数说明:

• *xi:一维坐标向量(可传多个)

• indexing:'xy'(默认,笛卡尔坐标)或 'ij'(矩阵索引)

• sparse:是否生成稀疏网格(默认 False)

• copy:是否复制数据(默认 True)

示例:

# X.shape == (2, 3), Y.shape == (2, 3)

NumPy 还提供了专门的网格生成对象,其中mgrid通过切片语法直接生成密集网格(dense grid)。

numpy.mgrid[start:stop:step]

ogrid与 mgrid 类似,也是网格生成对象,但生成的是开放网格(open grid)。

numpy.ogrid[start:stop:step]

开放网格不会生成完整的二维矩阵,而是生成可广播的一维数组,因此可以显著减少内存占用。

七、按函数规则生成

NumPy 提供了 fromfunction() 函数,用于根据数组元素的索引位置调用用户定义的函数,从而生成数组。

这种方式非常适合用于构造:

• 距离矩阵

• 权重矩阵

• 坐标函数

• 数值模拟网格

• 数学模式矩阵

fromfunction()

根据数组元素的索引位置调用指定函数,生成一个新的数组。

numpy.fromfunction(function, shape, *, dtype=float, like=None)

参数说明:

• function:用于计算数组元素值的函数。函数的参数个数必须与数组维度相同

• shape:指定生成数组的形状

• dtype:索引数组的数据类型(默认 float)

• like:指定参考数组,用于创建与其兼容的数组(NumPy 1.20 引入)。

示例:生成行列索引之和矩阵

print(a)

输出:

 [2 3 4]]

NumPy 会为每个维度创建一个索引数组,并将这些索引作为参数传递给 function,函数返回的结果即为数组元素值。

八、按随机数分布创建

NumPy 提供随机数生成模块 numpy.random。当前推荐使用 Generator 随机数接口。

详情请参阅:

小结

NumPy 提供了丰富的数组创建函数,可以通过对象转换、初始化函数、序列生成、模板复制、结构矩阵构造、网格生成以及随机数分布等多种方式创建 ndarray。掌握这些创建方式,可以灵活构造具有指定形状、数据类型与数值结构的数组,为后续的向量化计算与科学计算奠定基础。

点赞有美意,赞赏是鼓励

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
德比斯回应无缘冠军:有些失望,我犯了一些错误,但感谢张雪机车

德比斯回应无缘冠军:有些失望,我犯了一些错误,但感谢张雪机车

风过乡
2026-09-05 21:10:43
美菲已用实际行动证明:一旦开战,中国航母根本没法通过巴士海峡

美菲已用实际行动证明:一旦开战,中国航母根本没法通过巴士海峡

掉了颗大白兔糖
2026-09-05 01:18:31
离婚的妇人都是咋和前夫相处的?网友:我就好奇,有没有睡在一起

离婚的妇人都是咋和前夫相处的?网友:我就好奇,有没有睡在一起

带你感受人间冷暖
2026-08-31 00:05:16
三份合同都没问题,为何伦纳德只被罚70万?

三份合同都没问题,为何伦纳德只被罚70万?

绿茵狂热者
2026-09-06 08:15:39
专家劝告:糖尿病谨记,早晨 1 大忌,中午 2 不要,晚上 3 不做

专家劝告:糖尿病谨记,早晨 1 大忌,中午 2 不要,晚上 3 不做

荷兰豆爱健康
2026-09-06 07:35:37
“只有男人最懂男人”,女儿哭诉父亲不让穿小白裙,看照片才明白

“只有男人最懂男人”,女儿哭诉父亲不让穿小白裙,看照片才明白

世界圈
2026-09-03 10:15:52
一夜输光几十万,打工小伙喝下整瓶百草枯:被伤透的妻子选择放弃治疗

一夜输光几十万,打工小伙喝下整瓶百草枯:被伤透的妻子选择放弃治疗

民生故事会
2026-09-05 23:23:10
黑色写真为何让人挪不开眼

黑色写真为何让人挪不开眼

白宸侃片
2026-08-24 12:44:07
49岁梅洛尼霸气登场,意大利有史以来最长命的总理,超越了贝卢斯科尼

49岁梅洛尼霸气登场,意大利有史以来最长命的总理,超越了贝卢斯科尼

译言
2026-09-05 10:05:31
出局即换帅!女篮危机正式到来,四大接班名帅候选正式出炉

出局即换帅!女篮危机正式到来,四大接班名帅候选正式出炉

体育见习官
2026-09-06 06:34:42
炸裂!日本妻子拍AV挽救婚姻,瞒夫出道老公崩溃,如今丈夫成粉丝

炸裂!日本妻子拍AV挽救婚姻,瞒夫出道老公崩溃,如今丈夫成粉丝

悠悠说世界
2026-08-17 13:48:27
CCTV5直播!中国女篮生死战,战捷克迎两利好,胜则可小组出线

CCTV5直播!中国女篮生死战,战捷克迎两利好,胜则可小组出线

南海浪花
2026-09-06 05:37:08
最后1分钟连得8分!U18国产库里赛后一句话戳中本土教练最大弊病

最后1分钟连得8分!U18国产库里赛后一句话戳中本土教练最大弊病

弄月公子
2026-09-05 20:13:26
27.98万起!奥迪官宣:降价18.78万!

27.98万起!奥迪官宣:降价18.78万!

DeepAuto车探
2026-09-04 14:07:08
非必要不做肠镜?医生:只要做过肠镜,患者一定多加关注这4点!

非必要不做肠镜?医生:只要做过肠镜,患者一定多加关注这4点!

芹姐说生活
2026-07-09 23:13:04
1969年,李宗仁病重,临终前嘱咐30岁妻子:有机会替我看望一下秀文

1969年,李宗仁病重,临终前嘱咐30岁妻子:有机会替我看望一下秀文

大运河时空
2026-09-04 10:55:03
美国中期选举在混乱中拉开序幕

美国中期选举在混乱中拉开序幕

参考消息
2026-09-06 08:46:00
父亲用扁担送双胞胎姐妹上大学!俩人高考差3分,考入同一大学,住同一寝室

父亲用扁担送双胞胎姐妹上大学!俩人高考差3分,考入同一大学,住同一寝室

封面新闻
2026-09-04 23:39:05
为了碎银几两|所谓“告洋状”纳入扫黑除恶与流量生意

为了碎银几两|所谓“告洋状”纳入扫黑除恶与流量生意

天气观察站
2026-09-06 07:17:12
沃达丰意外曝光苹果新品售价:iPhone 18 Pro系列温和上涨 折叠屏iPhone Ultra身价不菲

沃达丰意外曝光苹果新品售价:iPhone 18 Pro系列温和上涨 折叠屏iPhone Ultra身价不菲

cnBeta.COM
2026-09-05 05:03:34
2026-09-06 09:12:49
MediaTea
MediaTea
专业的数字媒体、新媒体技术
2137文章数 86关注度
往期回顾 全部

科技要闻

华为何庭波,再次更新韬定律论文

头条要闻

牛弹琴:9月初的深圳 干了一件很不寻常的事

头条要闻

牛弹琴:9月初的深圳 干了一件很不寻常的事

体育要闻

本西蒙斯加盟国王,不管怎样,回来就好

娱乐要闻

阿Sa蔡卓妍首度求婚细节,感动落泪

财经要闻

被曝试药后死亡,药企董事竟怒怼记者

汽车要闻

带升降立标MPV 岚图梦想家9预售价42.99万起

态度原创

教育
数码
时尚
艺术
房产

教育要闻

动线定值问题,一个视频学会!

数码要闻

谷歌Pixel Watch 5智能手表获iFixit 9分可维修性评价

金秋最流行的鞋子,“红色”更时髦!

艺术要闻

别再说外星人了!三星堆最新发掘,直接实锤“龙的传人”

房产要闻

突发重磅!海口出台楼市新政!

无障碍浏览 进入关怀版