矩阵的运算 加法,数乘,减法,转置
矩阵的加减
矩阵的加法就是矩阵的对应位置相加,减法也是一样就是对应位置相减
数乘
转置
转置的操作和向量是一样的,就是把 aij 变成 aji,把行和列互换一下
对于矩阵而言, 转置其实就相当于把主对角线两侧的元素进行了调换
高维数组的转置方法tranpose
numpy.transpose
方法用于交换数组的维度,也就是将数组的行和列进行互换。对于二维数组来说,它实际上就是进行转置操作。
函数签名:
numpy.transpose(a, axes=None)
numpy.ndarray.transpose(axes=None)
参数:
numpy.ndarray
:要进行转置操作的数组。axes
:可选参数,用于指定交换维度的顺序(索引的形式)。默认情况下,会交换所有维度。可以传入一个整数元组来指定交换的维度顺序。
返回值:
- 返回转置后的数组。
注意事项:
- 如果数组是一维的,
transpose
方法不会对其进行转置,直接返回原数组。 - 如果数组是多维的,
transpose
方法可以根据axes
参数指定的顺序对维度进行调整。
示例:
import numpy as np
# 二维数组的转置(转置相当于行列互换)
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 法一:transposed_arr = np.transpose(arr)
# 转置数组(行列互换)
transposed_arr = arr.transpose()
print(transposed_arr)
# 输出:
# [[1 4]
# [2 5]
# [3 6]]
# 也可以使用T属性来进行转置
transposed_arr2 = arr.T
print(transposed_arr2)
# 输出:
# [[1 4]
# [2 5]
# [3 6]]
在线性代数和数组操作中,经常需要对数组的维度进行变换,numpy.transpose
方法是一个非常有用的工具。它可以用于处理各种维度不一致的数组,以及进行矩阵转置等操作。
🎯实战:
# coding: utf-8
import numpy as np
# 矩阵的加减
n1 = np.arange(6).reshape(2, 3)
print('矩阵的加减演示:', n1 + n1, '\n', n1 - n1)
print('=' * 20)
# 矩阵的数乘
print(n1 * 5)
print('=' * 20)
# 矩阵的转置
print(n1.T) # 转置
print('=' * 20)
v = np.array([1, 2, 3])
print(v.T) # 一位数组转置后仍然显示为行向量, 但它其实已经转置了
print('=' * 20)
# 我们可以通过改变形状把它变为一个列向量 注:转置后将会变为n行一列的二维数组
print(v.reshape(-1, 1)) # -1代表会根据数组的总元素个数和其他维度的大小自动计算该维度的大小
print('=' * 20)
print(n1)
print(n1.reshape(3, 2)) # 千万要注意, 对于更高维度的数组来说不能通过reshape改变形状来达到转置的目的, 此方法仅限于一维数组(向量)
print('=' * 20)
n1 = np.arange(6).reshape(2, 3)
# 查看当前数组的形状
print('数组的形状:', n1.shape)
n2 = n1.transpose(1, 0) # 1, 0指的是维度的索引顺序, 前一行的结果为'数组的形状: (2, 3)', 此时维度一索引为0,维度二索引为1
print(n2)
# 我们再来打印下转置后的维度
print(n2.shape) # result:(3, 2), 可以看到维度由2行3列变成了3行2列
print('=' * 20)
temp1 = np.arange(24).reshape((2, 3, 4)) # 创建一个三维数组, 可以理解为两个三行四列的元素组成的
print(temp1)
# 进行三维数组的转置
temp2 = temp1.transpose(1, 0, 2) # 此时的维度对应的是(3, 2, 4)
print('转置后的数组\n', temp2)
print('采用reshape直接改变形状的数组\n', temp1.reshape((3, 2, 4)))
"""
result:
可以看到高维数组已经不能简单的以改变数组的维度来去转置, 改变维度转置只限于一维数组
转置后的数组
[[[ 0 1 2 3]
[12 13 14 15]]
[[ 4 5 6 7]
[16 17 18 19]]
[[ 8 9 10 11]
[20 21 22 23]]]
采用reshape直接改变形状的数组
[[[ 0 1 2 3]
[ 4 5 6 7]]
[[ 8 9 10 11]
[12 13 14 15]]
[[16 17 18 19]
[20 21 22 23]]]"""
result:
矩阵的加减演示: [[ 0 2 4]
[ 6 8 10]]
[[0 0 0]
[0 0 0]]
====================
[[ 0 5 10]
[15 20 25]]
====================
[[0 3]
[1 4]
[2 5]]
====================
[1 2 3]
====================
[[1]
[2]
[3]]
====================
[[0 1 2]
[3 4 5]]
[[0 1]
[2 3]
[4 5]]
====================
数组的形状: (2, 3)
[[0 3]
[1 4]
[2 5]]
(3, 2)
====================
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
转置后的数组
[[[ 0 1 2 3]
[12 13 14 15]]
[[ 4 5 6 7]
[16 17 18 19]]
[[ 8 9 10 11]
[20 21 22 23]]]
采用reshape直接改变形状的数组
[[[ 0 1 2 3]
[ 4 5 6 7]]
[[ 8 9 10 11]
[12 13 14 15]]
[[16 17 18 19]
[20 21 22 23]]]
进程已结束,退出代码0