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

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.

相关推荐
热点推荐
张雪机车遗憾!德比斯首次杆位发车无缘冠军 获第3重新登上领奖台

张雪机车遗憾!德比斯首次杆位发车无缘冠军 获第3重新登上领奖台

念洲
2026-09-05 20:36:44
尼泊尔“楼坚强”房主:因为离河近地基打得很牢,水稍退后依靠管子和绳子被接到对岸

尼泊尔“楼坚强”房主:因为离河近地基打得很牢,水稍退后依靠管子和绳子被接到对岸

红星新闻
2026-09-05 17:15:20
爆大冷!西蒙尼不敢相信:马竞被灌3球,耻辱惨败

爆大冷!西蒙尼不敢相信:马竞被灌3球,耻辱惨败

足球狗说
2026-09-06 00:17:22
当孩子说“再玩10分钟”时,你的第一句话,决定了他20年后的人生

当孩子说“再玩10分钟”时,你的第一句话,决定了他20年后的人生

户外阿毽
2026-09-05 12:14:10
伟大的2-1逆转!郑钦文赢麻了:排名飙升+322万奖金+重返金花前三

伟大的2-1逆转!郑钦文赢麻了:排名飙升+322万奖金+重返金花前三

大秦壁虎白话体育
2026-09-06 02:12:08
“如果必须走那条路,先辈的血就白流了!”这句话,最近在网上戳中了千万人的心。

“如果必须走那条路,先辈的血就白流了!”这句话,最近在网上戳中了千万人的心。

回京历史梦
2026-09-05 10:55:14
随着张雪机车的两名车手分别以第3和第5完赛,WSBK最新积分榜出炉

随着张雪机车的两名车手分别以第3和第5完赛,WSBK最新积分榜出炉

侧身凌空斩
2026-09-05 21:00:22
2-1晋级!美网史诗般翻盘:郑钦文激动倒地庆祝,0-5落后连赢7局

2-1晋级!美网史诗般翻盘:郑钦文激动倒地庆祝,0-5落后连赢7局

侃球熊弟
2026-09-05 23:36:16
贺娇龙葬于父亲墓旁,坟茔朴素,母亲谢绝给女儿立雕像,为什么?

贺娇龙葬于父亲墓旁,坟茔朴素,母亲谢绝给女儿立雕像,为什么?

新民周刊
2026-09-05 16:54:09
1-2!中国金花无缘美网16强,单盘1-6,郑钦文不敌22号种子

1-2!中国金花无缘美网16强,单盘1-6,郑钦文不敌22号种子

郝小小看体育
2026-09-06 01:17:09
家长自报干部身份请老师关照,一句"有需要联系"把公权力明码标价

家长自报干部身份请老师关照,一句"有需要联系"把公权力明码标价

网易新闻出品
2026-09-04 19:11:29
一男子杀妻抛尸谎称其婚外情出走,6年后警方找到尸体;疑犯称夫妻生活时被言语刺激才下杀手;法院一审判处无期,女方家属将申请抗诉

一男子杀妻抛尸谎称其婚外情出走,6年后警方找到尸体;疑犯称夫妻生活时被言语刺激才下杀手;法院一审判处无期,女方家属将申请抗诉

都市快报橙柿互动
2026-09-05 21:24:43
海拔3200米沙漠连夜搜救,1岁裸体走失男童被找到,事件详情披露

海拔3200米沙漠连夜搜救,1岁裸体走失男童被找到,事件详情披露

扬子晚报
2026-09-05 10:55:31
唏嘘!43岁皇马弃帅登陆英超后开局3连败 率队两度领先被逆转+绝杀

唏嘘!43岁皇马弃帅登陆英超后开局3连败 率队两度领先被逆转+绝杀

我爱英超
2026-09-06 00:34:04
李嘉诚最新预判:未来10年,中国50%家庭或将面临五大挑战,你准备好了吗?

李嘉诚最新预判:未来10年,中国50%家庭或将面临五大挑战,你准备好了吗?

巢客HOME
2026-09-05 05:45:04
Blue Origin火箭爆炸声波横跨美国1600公里

Blue Origin火箭爆炸声波横跨美国1600公里

宇宙来信2
2026-09-05 03:35:34
戏耍国脚?邝兆镭降维打击!球迷:加盟中超以来踢得最好的1场

戏耍国脚?邝兆镭降维打击!球迷:加盟中超以来踢得最好的1场

足球大腕
2026-09-06 00:54:44
22岁女子结婚2个月,感觉和情夫更和谐,2011年让情夫杀死了丈夫

22岁女子结婚2个月,感觉和情夫更和谐,2011年让情夫杀死了丈夫

汉史趣闻
2026-09-05 16:10:04
副总统莎拉最新回应:我会被杀,我不信任法院、警察

副总统莎拉最新回应:我会被杀,我不信任法院、警察

中国新闻周刊
2026-09-05 19:40:07
当众拒唱国歌不认中国籍,把两个孩子全送出国,如今报应终于来了

当众拒唱国歌不认中国籍,把两个孩子全送出国,如今报应终于来了

鹤羽说个事
2026-09-02 16:51:59
2026-09-06 05:36:49
MediaTea
MediaTea
专业的数字媒体、新媒体技术
2136文章数 86关注度
往期回顾 全部

科技要闻

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

头条要闻

江西遂川泥石流1死11失联 男子:母亲电话一直打不通

头条要闻

江西遂川泥石流1死11失联 男子:母亲电话一直打不通

体育要闻

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

娱乐要闻

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

财经要闻

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

汽车要闻

千里浩瀚H5/30英寸大屏 星越L PLUS让你看到油车越级的一面

态度原创

游戏
艺术
旅游
家居
房产

发售时间迎来新线索!《龙珠》新作或明年初就能玩到

艺术要闻

14岁种下画家梦,51岁才拿起笔。她笔下的加拿大乡村,治愈了无数疲惫的灵魂!

旅游要闻

一川怒江碧水,百年古朴村寨,云雾漫染山野人间!

家居要闻

2026建博会(广州) 公装联探展交流活动

房产要闻

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

无障碍浏览 进入关怀版