赞
踩
表示数组的形状,也就是数组中各维度的大小。该属性的值为一个元组,例如,一个m行n列的二维数组,其shape属性的值为(m, n)。
表示数组的维度,也就是秩(rank)。秩是轴的数量,一维数组的秩为1,二维数组的秩为2,以此类推。在NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。
表示数组元素的总数。这个属性可以通过数组各维度的大小相乘得到。
表示数组的数据类型。这可以是任何NumPy支持的数据类型,如int、float、complex等。
表示数组中每个元素的大小,以字节为单位。
代码展示
import numpy as np
a = np.arange(15).reshape(3, 5) # 这里3为矩阵的行数,5为矩阵的列数
print(a)
print('数组的形状:', a.shape)
print('数组轴的个数:', a.ndim)
print('数组元素类型:', a.dtype)
print('数组中每个元素的字节大小:', a.itemsize)
print('数组元素的总个数:', a.size)
print('类型查询:', type(a))
print(a.data)
查询结果
import numpy as np
a = np.array([2, 3, 4]) # 整数类型数组
b = np.array([1.2, 3.5, 5.1]) # 浮点
print(a)
print(b)
# 运行结果
# [2 3 4]
# [1.2 3.5 5.1]
a1 = np.zeros((3,4))
print(a1)
# 运行结果
#[[0. 0. 0. 0.]
# [0. 0. 0. 0.]
# [0. 0. 0. 0.]]
a2 = np.ones((3,4))
print(a2)
# 运行结果
#[[1. 1. 1. 1.]
# [1. 1. 1. 1.]
# [1. 1. 1. 1.]]
a3= np.empty((2, 3))
print('数组a3: ', a3)
print(a3.dtype)
# 运行结果
#数组empty1: [[6.95073433e-310 6.95073433e-310 0.00000000e+000]
# [0.00000000e+000 0.00000000e+000 0.00000000e+000]]
# float64
a4 = np.arange(15).reshape(3,5)
print(a4)
# 运行结果
# [[ 0 1 2 3 4]
# [ 5 6 7 8 9]
# [10 11 12 13 14]]
full_array = np.full((2, 3), 5)
print("特定填充值数组:\n", full_array)
# 运行结果
# 特定填充值数组:
# [[5 5 5]
# [5 5 5]]
a5 = np.mat("1 2;3 4")
print(a5)
a6 = np.matrix("1,2;3,4")
print(a6)
a7 = np.matrix([[1, 2, 3, 4], [5, 6, 7, 8]])
print(a7)
# 运行结果
# [[1 2]
# [3 4]]
# [[1 2]
# [3 4]]
#[[1 2 3 4]
# [5 6 7 8]]
import numpy as np # 抽取一个3x4的二维数组 matrix = np.random.randn(3, 4) print(matrix) # 输出一个3x4的二维数组,包含随机浮点数,例如: # [[ 0.1234 -0.4567 0.7890 -1.2345] # [-0.5678 0.9012 -0.3456 0.7890] # [ 0.2345 -0.1234 0.5678 -0.9012]] # 生成指定维度大小(3行4列)的随机多维浮点型数据(二维), rand固定区间0.0 ~ 1.0 arr = np.random.rand(3, 4) print(arr) print(type(arr)) # 生成指定维度大小(3行4列)的随机多维整型数据(二维), randint()可指定区间(-1, 5) arr = np.random.randint(-1, 5, size=(3, 4)) print(arr) print(type(arr)) #生成指定维度大小(3行4列)的随机多维浮点型数据(二维), uniform()可以指定区间(-1, 5)产生-1到5之间均匀分布的样本值 arr = np.random.uniform(-1, 5, size=(3, 4)) print(arr) print(type(arr))
使用 np.transpose() 或 np.ndarray.T 对数组进行转置操作。
# 创建数组
my_array = np.array([[1, 2, 3], [4, 5, 6]])
# 获取特定元素
print("第一个元素:", my_array[0, 0])
print("最后一个元素:", my_array[-1, -1])
# 获取特定行
print("第一行:", my_array[0, :])
# 运行结果
# 第一个元素: 1
# 最后一个元素: 6
# 第一行: [1 2 3]
# 创建数组
my_array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 获取子数组
sub_array = my_array[0:2, 1:3]
print("子数组:\n", sub_array)
# 运行结果
# 子数组:
# [[2 3]
# [5 6]]
np.reshape()、np.ravel() 或 np.flatten()改变形状
# 创建数组
my_array = np.array([[1, 2, 3], [4, 5, 6]])
# 改变数组形状
reshaped_array = np.reshape(my_array, (3, 2))
print("改变形状后的数组:\n", reshaped_array)
# 运行结果
# 改变形状后的数组:
# [[1 2]
# [3 4]
# [5 6]]
np.concatenate()、np.vstack()、np.hstack() 或 np.column_stack() 连接数组
import numpy as np # 创建数组 array1 = np.array([[1, 2], [3, 4]]) array2 = np.array([[5, 6], [7, 8]]) # 沿水平方向连接数组 hstacked_array = np.hstack((array1, array2)) print("水平连接的数组:\n", hstacked_array) # 沿垂直方向连接数组 vstacked_array = np.vstack((array1, array2)) print("垂直连接的数组:\n", vstacked_array) # 运行结果 # 水平连接的数组: # [[1 2 5 6] # [3 4 7 8]] # 垂直连接的数组: # [[1 2] # [3 4] # [5 6] # [7 8]]
使用 np.split()、np.vsplit()、np.hsplit() 或 np.array_split() 对数组进行拆分操作。
# 创建数组 my_array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 沿垂直方向拆分数组 split_arrays = np.vsplit(my_array, 3) print("垂直拆分的数组:") for arr in split_arrays: print(arr) # 沿水平方向拆分数组 split_arrays = np.hsplit(my_array, 3) print("水平拆分的数组:") for arr in split_arrays: print(arr) # 运行结果 # 垂直拆分的数组: # [[1 2 3]] # [[4 5 6]] # [[7 8 9]] # 水平拆分的数组: # [[1] # [4] # [7]] # [[2] # [5] # [8]] # [[3] # [6] # [9]]
# 创建一个从0开始,到1结束,包含5个元素的等差数列
linspace_seq = np.linspace(0, 1, 5)
print(linspace_seq) # 输出: [0. 0.25 0.5 0.75 1. ]
# 创建一个从1开始,到100结束,包含5个元素的等比数列
geomspace_seq = np.geomspace(1, 100, 5)
print(geomspace_seq) # 输出: [ 1. 5.12 26.12 134.22 685.41]
# 基本函数如下 np.ceil(): 向上最接近的整数,参数是 number 或 array np.floor(): 向下最接近的整数,参数是 number 或 array np.rint(): 四舍五入,参数是 number 或 array np.isnan(): 判断元素是否为 NaN(Not a Number),参数是 number 或 array np.multiply(): 元素相乘,参数是 number 或 array np.divide(): 元素相除,参数是 number 或 array np.abs():元素的绝对值,参数是 number 或 array np.where(condition, x, y): 三元运算符,x if condition else y # 注意: 需要注意multiply/divide 如果是两个ndarray进行运算 shape必须一致 # 示例代码 arr = np.random.randn(2, 3) print(arr) print(np.ceil(arr)) print(np.floor(arr)) print(np.rint(arr)) print(np.isnan(arr)) print(np.multiply(arr, arr)) print(np.divide(arr, arr)) print(np.where(arr > 0, 1, -1))
np.mean(), np.sum():所有元素的平均值,所有元素的和,参数是 number 或 array
np.max(), np.min():所有元素的最大值,所有元素的最小值,参数是 number 或 array
np.std(), np.var():所有元素的标准差,所有元素的方差,参数是 number 或 array
np.argmax(), np.argmin():最大值的下标索引值,最小值的下标索引值,参数是 number 或 array
np.cumsum(), np.cumprod():返回一个一维数组,每个元素都是之前所有元素的 累加和 和 累乘积,参数是 number 或 array
# 多维数组默认统计全部维度,axis参数可以按指定轴心统计,值为0则按列统计,值为1则按行统计。
# 实例代码
arr = np.arange(12).reshape(3, 4)
print(arr)
print(np.cumsum(arr)) # 返回一个一维数组, 每个元素都是之前所有元素的 累加和
print(np.sum(arr)) # 所有元素的和
print(np.sum(arr, axis = 0)) #数组的按列统计和
print(np.sum(arr, axis = 1)) #数组的按行统计和
np.any(): 至少有一个元素满足指定条件,返回True
np.all(): 所有的元素满足指定条件,返回True
# 实例代码
arr = np.random.randn(2, 3)
print(arr)
print(np.any(arr > 0))
print(np.all(arr > 0))
np.unique():找到唯一值并返回排序结果,类似于Python的set集合
# 实例代码
arr = np.array([[1, 2, 1], [2, 3, 4]])
print(arr)
print(np.unique(arr))
arr = np.array([1, 2, 34, 5])
print("原数组arr:", arr)
# np.sort()函数排序, 返回排序后的副本
sortarr1 = np.sort(arr)
print("numpy.sort()函数排序后的数组:", sortarr1)
# ndarray直接调用sort, 在原数据上进行修改
arr.sort()
print("数组.sort()方法排序:", arr)
# 创建数组
array1 = np.array([[1, 2], [3, 4]])
array2 = np.array([[5, 6], [7, 8]])
# 数组的点积运算
dot_product = np.dot(array1, array2)
print("数组的点积运算:\n", dot_product)
# 数组的逆运算
inv_array = np.linalg.inv(array1)
print("数组的逆运算:\n", inv_array)
# 数组的行列式
det_array = np.linalg.det(array1)
print("数组的行列式:", det_array)
# 数组的特征值
eigvals_array = np.linalg.eigvals(array1)
print("数组的特征值:", eigvals_array)
# 数组的线性方程组求解
b = np.array([5, 7])
solve_array = np.linalg.solve(array1, b)
print("线性方程组的解:", solve_array)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。