Numpy中shape与reshape函数的核心区别与用法详解

晚来风
晚来风
发布时间:2026-10-15| 4人浏览过
原创

本文详细解析Numpy中shape与reshape函数的区别。shape用于获取数组维度信息,返回元组;reshape用于改变数组形状而不修改原始数据,要求元素总数不变且返回视图。文章涵盖一维至三维数组的shape解读及reshape的参数规则,适合Python初学者参考。

1 shape()函数

shape函数用于读取矩阵或数组的维度信息。例如,shape[0]表示获取矩阵第一维度的长度,通常对应行数。该函数的输入参数可以是表示维度的整数,也可以是具体的矩阵对象。shape函数执行后返回一个元组(tuple),用以描述数组(矩阵)的具体维度或形状。具体示例如下:

  • w.shape[0]返回的是w的行数
  • w.shape[1]返回的是w的列数
  • df.shape():查看行数和列数

当数组(矩阵)仅有一个维度时,shape属性仅包含shape[0],其返回值为该一维数组中元素的总个数。通俗而言,即返回列数,因为一维数组可视作单行结构。在创建一维数组时,使用圆括号()或方括号[]均可,但若涉及多维数组,则必须使用方括号[]。

>>> a=np.array([1,2])
>>> a
array([1, 2])
>>> a.shape
(2L,)
>>> a.shape[0]
2L
>>> a.shape[1]
IndexError: tuple index out of range   #最后报错是因为一维数组只有一个维度,可以用a.shape或a.shape[0]来访问
 
#这个使用的是两个()包裹,得到的数组和前面的一样
>>> a=np.array((1,2))
>>> a
array([1, 2]) 

当数组具有两个维度(即包含行和列)时,a.shape返回的元组将明确指示该数组的行数与列数。

 #注意二维数组要用()和[]一起包裹起来,键入print a 会得到一个用2个[]包裹的数组(矩阵)
>>> b=np.array([[1,2,3],[4,5,6]])
>>> b
array([[1, 2, 3],
       [4, 5, 6]])
>>> b.shape
(2L, 3L)

总结:使用np.array()创建数组时,

一维的可以直接np.array([1,2,3])或者np.array((1,2,3))

二维的要使用np.array([[1,2,3],[1,2,3]]),用一个()和一个[]把要输入的list包裹起来

三维的要使用np.array([[[1,2,3],[1,2,3]]]),用一个()和两个[]把要输入的list包裹起来

>>> a=np.array([[[1,2],[3,4]]])
>>> a
array([[[1, 2],
        [3, 4]]])
>>> a.shape
(1L, 2L, 2L)

返回的元组表示3个维度各包含的元素的个数。所谓元素,在一维时就是元素的个数,二维时表示行数和列数,三维时a.shape【0】表示创建的块数,a.shape【1】和a.shape【2】表示每一块(每一块都是二维的)的行数和列数。

>>> a=np.ones([2,2,3])#创建两个2行3列的数组(矩阵)
>>> a
array([[[ 1.,  1.,  1.],
        [ 1.,  1.,  1.]],
 
       [[ 1.,  1.,  1.],
        [ 1.,  1.,  1.]]])

2 reshape()函数

reshape()函数用于改变数组的形状,且原始数据保持不变。需要注意的是,reshape()函数中的参数必须满足其乘积等于数组中数据的总数。

如:当我们将8个数使用(2,3)重新排列时,python会报错

import numpy as np
 
a=np.array([1,2,3,4])
b=np.array([[1,2,3,4],[4,5,6,7],[7,8,9,1]])
print("a:\n",a)
print("b:\n",b)
print(b.dtype)
 
a_r=a.reshape((2,2))  
print("a_r:\n",a_r)
d=a.reshape((-1,1))
print("d:\n",d)
e=a.reshape((1,-1))
print("e:\n",e)
#结果如下
a:
 [1 2 3 4]
c:
 [[1 2 3 4]
 [4 5 6 7]
 [7 8 9 1]]
int32
 
a_r:
 [[1 2]
 [3 4]]
d:
 [[1]
 [2]
 [3]
 [4]]
e:
 [[1 2 3 4]]

而且,reshape()函数得出的数组与原数组使用的是同一个存储空间,改变一个,另一个也随之改变。

【注意】shape和reshape()函数都是对于数组(array)进行操作的,对于list结构是不可以的

【参考】

Python:numpy中shape和reshape的用法

到此这篇关于Numpy中的shape、reshape函数的区别的文章就介绍到这了,更多相关Numpy shape reshape内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

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

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 算法库。