一、shape的概念
numpy是一个广泛使用的Python科学计算库,该库可以帮助Python开发人员进行各种维度的数组计算。而shape就是numpy数组的一个属性,可以用来表示数组的“形状”,即数组每一维度的大小。numpy.shape返回的是一个元组,其中的每一个元素都表示数组在每一个维度上的大小。比如,(2,3)表示数组在第一维度上有2个元素,在第二维度上有3个元素。
import numpy as np
a = np.arange(15).reshape(3, 5)
print(a.shape)
# 输出(3,5)
在上面的代码中,首先创建了一个长度为15的一维数组,然后调用reshape方法将其变形成3行5列的矩阵,最后通过shape属性打印出了矩阵的形状。
二、numpy.shape和len的区别
numpy.shape和len都可以用来表示数组的长度,但是它们之间存在着一些重要的区别。len只能返回数组的第一个维度上的元素个数,而numpy.shape可以返回每一个维度上的元素个数。
b = np.array([[1, 2], [3, 4], [5, 6]])
print(len(b))
# 输出3
print(b.shape)
# 输出(3,2)
在上面的代码中,首先创建了一个二维数组b,然后使用len打印出了其第一个维度上的元素个数,即为3。同时,使用numpy.shape打印出了该数组在每一个维度上的元素个数。
三、numpy.shape的使用场景
numpy.shape具有广泛的使用场景,下面介绍一些常用的场景。
1. 矩阵转置
在numpy中,可以使用T属性将一个矩阵进行转置操作。而利用numpy.shape获取的元组便可以轻松地进行矩阵转置。
c = np.array([[1.,2.],[3.,4.]])
print(c)
# 输出[[1.,2.],[3.,4.]]
print(c.T)
# 输出[[1.,3.],[2.,4.]]
print(c.shape)
# 输出(2, 2)
print(c.T.shape)
# 输出(2, 2)
2. 矩阵相乘
在使用numpy进行矩阵运算时,需要确保两个矩阵的维度匹配。利用numpy.shape可以很方便地进行维度匹配。
d = np.array([[1, 2], [3, 4]])
e = np.array([[5, 6], [7, 8]])
print(np.dot(d, e))
# 输出[[19 22],[43 50]]
print(d.shape,e.shape)
# 输出(2, 2) (2, 2)
3. 图像处理
在进行图像处理时,利用numpy.shape可以很方便地获取图像的宽度和高度。
from PIL import Image
img = Image.open('test.jpg').convert('RGB')
img_arr = np.asarray(img)
print(img_arr.shape)
# 输出(400, 640, 3)
在上面的代码中,首先使用PIL库打开一张图片,并将其转换为RGB模式,然后使用numpy.asarray将其转换为numpy数组。最后,通过numpy.shape获取了图像的宽度、高度和通道数。
四、shape的小技巧
numpy.shape有一些小技巧可以帮助您更快地进行数组操作。
1. 一维数组
当使用numpy.shape操作一维数组时,可以将其转换为长度为1的元组。
f = np.array([1,2,3])
print(f.shape)
# 输出(3,)
print(f.reshape(1,-1).shape)
# 输出(1, 3)
2. 数组维度转换
当操作二维数组时,可以使用转置操作和reshape来改变数组的形状。
g = np.array([[1, 2], [3, 4]])
print(g.shape)
# 输出(2, 2)
g = g.T
print(g.shape)
# 输出(2, 2)
g = g.reshape((4, 1))
print(g.shape)
# 输出(4, 1)
在上面的代码中,首先创建了一个二维数组g,然后进行了转置操作和reshape操作,分别将其转换为了一个(2,2)大小和一个(4,1)大小的数组。
3. 数组形状的推测
当使用numpy.shape操作多维数组时,可以推测出数组的元素个数。
h = np.array([[[0, 1], [2, 3]], [[4, 5], [6, 7]]])
print(h.shape)
# 输出(2,2,2)
print(np.prod(h.shape))
# 输出8
在上面的代码中,首先创建了一个三维数组h。利用numpy.shape可以获取到数组在每一个维度上的大小为2,2,2。而通过numpy.prod函数可以很容易地得出该数组的元素个数,为8。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/199284.html