谈谈我对矩阵维度的理解

前言

在机器学习中,遇到的数据都是以矩阵形式存储的,那么矩阵的维度经常在变化,在编写代码应该时刻注意矩阵的维度变化,不然在参数和矩阵进行相乘时会报错。

一、混淆点

在机器学习领域经常会说将特征向量由低维空间映射到高维空间。比如平面就是二维空间,立体就是三维空间,超过三维空间我们就不知道怎样表示。
特征向量feature=[1,2,3,4],feature有4个特征,假设特征空间由这4个特征可以表示,那么给出这4个特征独一无二的数字即可在特征空间上表示出。
我们在口头上经常说一个矩阵的维度是多少,其实说的是这个矩阵的大小是多少,也就是矩阵的shape是多少。
比如[1,2.3]的shape为(3,),[[1,2,3]]的shape为(1,3),.而前者的维度为1,后者的维度为2。

二、代码实现

numpy中的array和torch、tensorflow中的tensor本质是一样的,都是想利用向量矩阵表示参数.本文先写下numpy中的array代码实现。

1.矩阵相乘

带着疑问去写
1.shape大小要符合矩阵相乘运算规则吗?
两个向量相乘:

import numpy as np
w=np.array([1,2,3])
print(w.shape)
x=np.array([1,2,3])
print(x.shape)
print(np.dot(w,x))

输出:

(3,)
(3,)
14

结果就是两个向量相乘最后得到一个数。在numpy.dot中向量相乘肯定得到一个数,和我们数学中两个向量相乘可能会得到一个矩阵不同。
两个矩阵相乘:

import numpy as np
w=np.array([[1,2,3]])
print(w.shape)
x=np.array([[1,2,3]])
print(x.shape)
print(np.dot(w,x))

输出报错:

Traceback (most recent call last):
  File "D:/机器学习实现/2.py", line 10, in <module>
    print(np.dot(w,x))
  File "<__array_function__ internals>", line 6, in dot
ValueError: shapes (1,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)

输出显示维度没有对齐,因为w的shape(1,3)和x的shape(1,3)中3和1不相等,因此不满足矩阵的乘法运算。
解决方法:将矩阵x进行转置满足(1,3)*(3,1)=(1,1)


import numpy as np
w=np.array([[1,2,3]])
print(w.shape)
x=np.array([[1,2,3]])
print(x.shape)
print(np.dot(w,np.transpose(x)))

输出:最后得到shape大小为(1,1)的矩阵。

(1, 3)
(1, 3)
[[14]]

疑问:shape大小为(1,3)和(3,)满足矩阵运算吗?
答:可以,矩阵(1,3),向量(3,).毫无疑问肯定是满足矩阵向量之间运算的。
(1,3)*(3,)=(1,),最后会得到一个向量
代码:

import numpy as np
w=np.array([[1,2,3]])
print(w.shape)
x=np.array([1,2,3])
print(x.shape)
print(np.dot(w,np.transpose(x)))

输出:

(1, 3)
(3,)
[14]

总结

关于tensor那一部分也是相同的,抽空找个时间顺便把各种转置乱七八糟的函数写完.未完待续…

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值