PHP小丑 发表于 2022-8-9 18:46:27

浅谈Numpy中的shape、reshape函数的区别

1 shape()函数
读取矩阵的长度,比如shape就是读取矩阵第一维度的长度,相当于行数。它的输入参数可以是一个整数表示维度,也可以是一个矩阵。shape函数返回的是一个元组tuple,表示数组(矩阵)的维度/ 形状,例子如下:

[*]w.shape返回的是w的行数
[*]w.shape返回的是w的列数
[*]df.shape():查看行数和列数1. 数组(矩阵)只有一个维度时,shape只有shape,返回的是该一维数组(矩阵)中元素的个数,通俗点说就是返回列数,因为一维数组只有一行,一维情况中array创建的可以看做list(或一维数组),创建时用()和[ ]都可以,多维就使用[ ]
>>> a=np.array()>>> a
array()
>>> a.shape
(2L,)
>>> a.shape
2L
>>> a.shape
IndexError: tuple index out of range   #最后报错是因为一维数组只有一个维度,可以用a.shape或a.shape来访问
#这个使用的是两个()包裹,得到的数组和前面的一样
>>> a=np.array((1,2))
>>> a
array()
2.数组有两个维度(即行和列)时,a.shape返回的元组表示该数组的行数与列数
#注意二维数组要用()和[]一起包裹起来,键入print a 会得到一个用2个[]包裹的数组(矩阵)>>> b=np.array([,])
>>> b
array([,
])
>>> b.shape
(2L, 3L)
总结:使用np.array()创建数组时,
一维的可以直接np.array()或者np.array((1,2,3))
二维的要使用np.array([,]),用一个()和一个[]把要输入的list包裹起来
三维的要使用np.array([[,]]),用一个()和两个[]把要输入的list包裹起来
>>> a=np.array([[,]])>>> a
array([[,
]])
>>> a.shape
(1L, 2L, 2L)
返回的元组表示3个维度各包含的元素的个数。所谓元素,在一维时就是元素的个数,二维时表示行数和列数,三维时a.shape【0】表示创建的块数,a.shape【1】和a.shape【2】表示每一块(每一块都是二维的)的行数和列数。
>>> a=np.ones()#创建两个2行3列的数组(矩阵)>>> a
array([[[ 1.,1.,1.],
[ 1.,1.,1.]],
[[ 1.,1.,1.],
[ 1.,1.,1.]]])
2 reshape()函数改变数组的形状,并且原始数据不发生变化。但是,reshape()函数中的参数需要满足乘积等于数组中数据总数.
如:当我们将8个数使用(2,3)重新排列时,python会报错
import numpy as npa=np.array()
b=np.array([,,])
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:

c:
[

]
int32
a_r:
[
]
d:
[


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

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


http://blog.itpub.net/69901823/viewspace-2909531/
页: [1]
查看完整版本: 浅谈Numpy中的shape、reshape函数的区别