[numpy] 中shape和size的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[numpy] 中shape和size的区别相关的知识,希望对你有一定的参考价值。
参考技术A 在处理图像的时候,shape 和 size 函数可以说是我用得最多也最容易用错的函数了。终于痛下决心要把它记下来!!!记住哼哼size()和shape () 是numpy模块中才有的函数
size():计算数组和矩阵所有数据的个数
a = np.array([[1,2,3],[4,5,6]])
np.size(a),返回值为 6
np.size(a,1),返回值为 3
shape ():得到矩阵每维的大小
a = np.array([[1,2,3],[4,5,6]])
np. shape (a),返回值为 (2,3)
另外要注意的是,shape和size既可以作为函数,也可以作为ndarray的属性
a.size,返回值为 6,
a.shape,返回值为 (2,3)
切记不要加()!不能用啊a.shape()
NumPy的使用
一、NumPy的简单属性
import numpy as np a = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] b = np.array(a) # 创建数组 size = b.size # 数组元素个数 shape = b.shape # 数组形状,返回一个数组一维和二维长度的元组 ndim = b.ndim # 数组维度 # numpy是无法直接判断出由数值与字符混合组成的数组中的数值型数据的, # 因为由数值类型和字符类型组成的numpy数组已经不是数值类型的数组了,而是dtype=‘<U11‘。 t = b.dtype # 数据类型 b[1, 2] # 7 b[1][2] # 7 array_zero = np.zeros([3, 4]) # 快速创建一个 3 × 4 的数组,值为0 array_one = np.ones([3, 4]) # 快速创建一个 3 × 4 的数组,值为1 # arange函数用于创建等差数组 # arange([start,] stop[, step,], dtype=None) 其中start,step,dtype可以省略,分别是起始点、步长、和返回类型。 array_arange = np.arange(5) # 起始点0,结束点5,步长1,返回类型array,一维 # linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) # endpoint: 为true,stop是最后一个样本。否则,它不包括在内。默认true。 # retstep: 为true,则输出一个元组,元组第一个元素是生成的数列,第二个元素是步长 array_lin = np.linspace(1, 10, 5, False, True, dtype=int) print(array_lin) c = np.random.rand(5, 5) # 创建一个 5 × 5 的数组,值在0-1之间 f = np.random.uniform(0, 100) # 创建指定范围内的一个随机数 i = np.random.randint(0, 100) # 创建指定范围内的一个随机整数 d = np.random.normal(2, 10, (2, 3)) # 对于一维数组来说,python原生的list和numpy的array的切片操作都是相同的。 # 对于多维数组,切片的数组必须是规则的 # [行起始索引:行结束索引, 列起始索引:列结束索引] # 包含起始索引,不包含结束索引 slice_arr1 = b[1, :] # 取第 1 行数据 slice_arr2 = b[1:3, :] # 取第 1 行到第 3 行的数据,不包含第 3 行 # M 为行数,N为列数 slice_arr3 = b[:, 1] # 取第 1 列的数据,以 1 × N 数组形式返回 slice_arr4 = b[:, :2] # 取第 0 列的数据,以 M × 2 数组形式返回 slice_arr5 = b[1:2, 1:3] # 取第 1 - 2行(不含第2行),第 1 - 3 列(不含第3列)的矩阵数据
二、NumPy计算
import numpy as np a = [[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]] b = np.array(a) c = b > 80 # 条件判断 d = np.where(b < 80, ‘差‘, ‘优‘) # 三目运算 vmax = np.amax(b) # 最大值 colMax = np.amax(b, axis=0) # 每一列的最大值 rowMax = np.amax(b, axis=1) # 每一行的最大值 vmin = np.amin(b) # 最小值 colMin = np.amin(b, axis=0) # 每一列的最小值 rowMin = np.amin(b, axis=1) # 每一行的最小值 vmean = np.mean(b) # 平均值 colmean = np.mean(b, axis=0) # 每一列的平均数 rowmean = np.mean(b, axis=1) # 每一行的平均数 vstd = np.std(b) # 方差 colstd = np.std(b, axis=0) # 每一列的方差 rowstd = np.std(b, axis=1) # 每一行的方差 b[:, 0] = b[:, 0] + 5 # 结合切片理解,所有行、第0列,加5
三、 数据读写
import numpy as np src = [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]] # save 和 load 以NumPy专用的二进制格式保存数据,它们会自动处理元素类型和形状等信息 # 如果文件路径末尾没有扩展名.npy或者是其他扩展名,该扩展名会被自动加上。 np.save(‘a‘, src) a = np.load(‘a.npy‘) print(a) # savez用于将多个数组保存到一个文件中,扩展名为.npz # .npz是一个压缩文件 # 非关键字参数传递的数组会自动起名为arr_0, arr_1... # load函数自动识别npz文件,并且返回一个类似于字典的对象,可以通过数组名作为关键字获取数组的内容 srcB = [[10, 11, 12, 13, 14], [15, 16, 17, 18, 19]] srcC = [[20, 21, 22, 23, 24], [25, 26, 27, 28, 29]] np.savez(‘aa‘, src, srcB, C=srcC) aa = np.load("aa.npz") print(aa[‘arr_0‘]) print(aa[‘arr_1‘]) print(aa[‘C‘]) # loadtxt 和 savetxt 可以读写1维和2维的数组 np.savetxt("b.txt", src) # 缺省按照‘%.18e‘格式保存数据,以空格分隔 b = np.loadtxt("b.txt") np.savetxt("b.txt", src, fmt=‘%d‘, delimiter=‘,‘) # 整型,以逗号分隔 b = np.loadtxt("b.txt", delimiter=‘,‘) # load时也要指定为逗号分隔
四、 矩阵操作
import numpy as np a = np.array([[1, 2], [3, 4], [5, 6]]) b = np.array([[10, 20], [30, 40], [50, 60]]) c = np.vstack((a, b)) # [[1, 2], [3, 4], [5, 6], [10, 20], [30, 40], [50, 60]] 列数必须相同 d = np.hstack((a, b)) # [[1, 2, 10, 20], [3, 4, 30, 40], [5, 6, 50, 60]] 行数必须相同
以上是关于[numpy] 中shape和size的区别的主要内容,如果未能解决你的问题,请参考以下文章
PyTorch获取Tensor大小,size与shape的区别
PyTorch获取Tensor大小,size与shape的区别
OpenCV+python 彩色图像通道拆分与组合并判断size,shape函数的用法与区别