python矩阵变量

发布于:2025-07-21 ⋅ 阅读:(18) ⋅ 点赞:(0)

一、说明

用numpy进行矩阵运算,有一些令人迷惑的地方,如果认识不清,编程将很是痛苦。本文将对一些矩阵和向量的生成和使用做一些解释。

二、Numpy中的向量和矩阵的解释

  • numpy的矩阵和向量是严格区分的。N×1的矩阵,1×N的矩阵都不是向量。
  • 而向量是不可以转置的,因此行向量和列向量不加以区分,这一点尤其重要。
  • 乘法中向量只能跟在矩阵的后面,无论列向量还是行向量,如果有出现在乘式的前面,那一定是个矩阵(1×N)
  • 向量可以求内积得到标量,这和1×N与N×1的矩阵乘积不同,1×N与N×1的内积是[[C]],即1×1矩阵,需要降维或提取才能成为标量,这很重要。

三、生成向量和矩阵

3.1 用单个list的生成(向量和矩阵)

(1)用单个list生成行、列向量
注解:在numpy中,行向量和列向量不区分,

  • 行向量转置依然是行向量。
  • 行向量点积是不需要先转置的。
import numpy as np
a = np.array([1,2,3,1,2,3])
b = np.array([1,2,1,1,2,1])

inm = np.dot(a,b)
print(inm)
print(a)
print(a_type)

结果
16
[1 2 3 4 5 6]
(6,)

注意:行列向量不加区分,可以放心使用不会出现异意。

(2)用单个list生成矩阵行矩阵
用一个list生成n×1的矩阵,注意:此处矩阵与上面的向量不同

import numpy as np
a = np.array([1,2,3,1,2,3]).reshape(-1,1 )
print(a)
print(a.shape)

结果:
[[1]
[2]
[3]
[1]
[2]
[3]]
(6, 1)
(3)单个用list生成矩阵列矩阵
用一个list生成1×n的矩阵,注意:此处矩阵与上面的向量不同

import numpy as np
a = np.array([1,2,3,1,2,3]).reshape( 1,-1 )
print(a)
print(a.shape)

[[1 2 3 1 2 3]]
(1, 6)

(4)用单个list生成矩阵
用单个list生成其它形状矩阵,只要reshape就可以了。

import numpy as np
a = np.array([1,2,3,1,2,3]).reshape( 2,-1 )
print(a)
print(a.shape)

[[1 2 3]
[1 2 3]]
(2, 3)

3.2 用多个list的生成(向量和矩阵)

NumPy提供了多种方法来生成矩阵,比如使用numpy.array、numpy.zeros、numpy.ones、numpy.eye、numpy.random.rand等。

(1)多个list已经给定矩阵形状

#生成一个2x3的矩阵**
matrix1 = np.array([[1, 2, 3], [4, 5, 6]])

(2)常数填充

# 生成一个3x3的零矩阵
matrix2 = np.zeros((3, 3))
print("Zero Matrix:\n", matrix2)
 
# 生成一个3x3的单位矩阵(所有对角线元素为1,其余为0)
matrix3 = np.eye(3)
print("Identity Matrix:\n", matrix3)

(3)随机填充
使用numpy.random.rand和numpy.random.randn这些函数可以生成随机矩阵。rand生成[0, 1)区间内的均匀分布随机数,而randn生成标准正态分布的随机数

# 生成一个4x4的随机矩阵,元素在[0, 1)区间内均匀分布
matrix4 = np.random.rand(4, 4)
print("Random Matrix:\n", matrix4)

3.3 使用numpy.arange和numpy.reshape结合

如果你想要创建一个特定范围内的数字组成的矩阵,可以先使用arange生成一维数组,然后使用reshape改变其形状。

# 创建一个1到9的一维数组,然后重塑为3x3的矩阵
flat_list = np.arange(1, 10)
matrix = flat_list.reshape(3, 3)
print(matrix)

3.4 使用numpy.linspace和numpy.reshape结合

如果你想要在指定的区间内生成等间距的数字,可以使用linspace。

# 在0到9之间生成10个等间距的数字,然后重塑为3x3的矩阵
flat_list = np.linspace(0, 9, 10)  # 注意这里总共生成10个数字,如果要精确控制为9个数字,可以调整第三个参数为9+1=10或使用其他方式确保总数正确。
matrix = flat_list[:9].reshape(3, 3)  # 只取前9个数字来确保总数正确,然后重塑。注意这里的总数要和reshape的目标形状相匹配。
print(matrix)

注意:在使用linspace时,如果你想确保恰好有9个数字(例如从0到9),你应该这样调用:

flat_list = np.linspace(0, 8, 9)  # 从0到8生成9个数字,这样可以确保总数正确。然后重塑。
matrix = flat_list.reshape(3, 3)  # 重塑为3x3的矩阵。
print(matrix)

网站公告

今日签到

点亮在社区的每一天
去签到