矩阵和列表的输出的区别在于,矩阵的输出没有逗号分割
一、ndarray的基本属性
arr = np.array([1,3,4])
print(arr)
print(arr.ndim) # 维度
print(arr.shape) # 形状
print(arr.size) # 共计多少个元素位
二、ndarray的创建
a = np.array([1,2,3],dtype = np.float64) # 一维列表创建,并指明数据类型
b = np.array([[1,2,6],
[3,4,5]]) # 二维列表创建
c = np.zeros((3,4)) # 生成3行*4列的0矩阵
d = np.empty((3,4)) # 生成3行*4列的空矩阵
e = np.arange(0, 12).reshape((3,4)) # 用0~11共计12个数,生成3行*4列的矩阵
f = np.arange(10,20,2) # 用10, 12, 14, 16, 18生成一维矩阵
g = np.linspace(0, 10, 100,endpoint=True) # 0~10之间等分100份的一维矩阵
np.arange(start, end,step):
从start到end以step为步长生成一维矩阵reshape((a, b)):
将ndarray重新排列成a * b的矩阵np.linspace(start, end, num):
生成start 到 end分num份的一维矩阵
三、随机数矩阵
-
生成0~1之间的均匀分布的数组
np.random.random( (4, 3) ) # 维度以元组的形式给出 np.random.ranf( (4,3) ) # 维度以元组形式给出 ## (1, 4) 和 (4) 并不相同,前者是二维矩阵,后者是一维 np.random.rand(2,3,4) # 维度直接以数字给出 np.random.uniform(low=x, high=y, size=(a, b, c)) # 生成x ,y之间的,维度为a*b*c的均匀分布
-
生成标准正态数组
np.random.randn(2, 3, 4) # 生成一个2*3*4的服从正态分布的数组
-
生成随机整数
np.random,randint(low=x, high=y, size=(a, b,c)) # low 和 high 指定范围 # size用来声明矩阵的维度
-
从数组中选择数据生成随机数
a = np.random.choice(ls = [3,5,6], size=(2,3,4), p=[0.1,0.5,0.4]) # 从列表中选择数据,每个数据依照p的概率生成size大小的随机数
四、 ndarray的计算
b = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
]
a = np.array(b) # 生成一个二维矩阵
a.T # a的转置
a.flatten() # 将a矩阵按行优先排列为一维矩阵
a.copy() # 复制a的副本
np.sum(a) # 所有数据的和 = 78
np.sum(a, axis = 1) # 每一行的和 = [10 26 42]
np.sum(a, axis = 0) # 每一列的和 = [15 18 21 24]
np.max(a) # 输出最大值 = 12
np.max(a, axis = 1) # 每一行的最大值 [4 8 12]
np.max(a, axis = 0) # 每一列的最大值 [ 9 10 11 12]
# np.min同max相同用法
c = np.array([[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11]])
a + c # 同型矩阵可以相加减 = [[ 1 3 5 7]
# [ 9 11 13 15]
# [17 19 21 23]]
np.sin(a) # 对矩阵每个元素进行sin运算
np.exp(a) # 对矩阵每个元素进行指数运算
x.dot(y) # 矩阵x*矩阵y
部分数学函数见:数学函数(Mathematical functions) | NumPy
五、ndarray 的常见使用
a = np.arange(12).reshape((3,4)) # 生成一个矩阵
#[
# [ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
#]
# 索引选择
a[0,:] 或 a[0] # 选择第一行 = [0 1 2 3]
a[:, 0] # 选择第一列 = [0 4 8]
a[0][0] # 选择矩阵的第一行第一列的元素 = 0
# 可遍历
for row in a: # 按行遍历, 每个row是a的行
print(row)
# 可分割
np.vsplit(a, 3) # 按列分割成三份
# [
# array([[0, 1, 2, 3]]),
# array([[4, 5, 6, 7]]),
# array([[ 8, 9, 10, 11]])
# ]
np.hsplit(a, 2) # 按行分割成两份
#[array([[0, 1],
# [4, 5],
# [8, 9]]),
# array([[ 2, 3],
# [ 6, 7],
# [10, 11]])]
持续更新ing