[已解决] 点乘问题:矩阵和向量点乘,矩阵每一行都和向量点乘

[复制链接]
Guy_Fawkes 发表于 2022-4-29 01:09:35
求教一下各位巨佬:矩阵和向量点乘,如何实现矩阵每一行都和向量点乘
例如,我现在有一个
3 X 3 矩阵A=[1,2,3;4,5,6;7,8,9]
3 x 1 向量B=[1,2,3]
我想得到
3 X 3矩阵C=A .* B = [1,4,6;4,10,18;7,16,27 ];  %这句语法是错误的

请问一下巨佬们,这个问题怎么破,我百度了许久,但貌似怎么尝试都没有用,感谢各位!!:'(:'(  
不考虑使用for循环,不然会耽误许多计算时间。

最佳答案


TouAkira 发表于 2022-4-29 01:49:04
同维度才能点乘,需要先生成与A同维度的矩阵,可以用全是 1 的列向量
ones( 3, 1 ) * B .* A
也可以用 repmat函数(超链接,自己点进去看)
repmat( B, [ 3, 1 ] ) .* A
回复此楼

4 条回复


TouAkira 发表于 2022-4-29 01:49:04
同维度才能点乘,需要先生成与A同维度的矩阵,可以用全是 1 的列向量
ones( 3, 1 ) * B .* A
也可以用 repmat函数(超链接,自己点进去看)
repmat( B, [ 3, 1 ] ) .* A
回复此楼

Guy_Fawkes 发表于 2022-4-29 01:54:48
TouAkira 发表于 2022-4-29 01:49
同维度才能点乘,需要先生成与A同维度的矩阵,可以用全是 1 的列向量
ones( 3, 1 ) * B .* A
也可以用 repm ...

感谢大哥的回复,是的,就是我实际数据比较大
矩阵A是125000*10000的矩阵,如果要实现点乘需要把向量B也改为相同size的话,怕是会占用许多内存,或者导致其它一些时间开销,我去对比一下这种做法能否比for循环更快,总之写写大哥了,不知道还有没有其它办法

TouAkira 发表于 2022-4-29 02:04:25
Guy_Fawkes 发表于 2022-4-28 13:54
感谢大哥的回复,是的,就是我实际数据比较大
矩阵A是125000*10000的矩阵,如果要实现点乘需要把向量B也 ...

那直接 A * diag( B ) 就行了,根本不需要用点乘

Guy_Fawkes 发表于 2022-4-29 22:14:01
TouAkira 发表于 2022-4-29 02:04
那直接 A * diag( B ) 就行了,根本不需要用点乘

是的,这个diag(B)相当于先把向量变成矩阵,和上面把向量扩成矩阵的思路是一样的,然后这样子变成矩阵乘法,矩阵乘法还需要有许多加法在里面,效果不如直接点乘。感谢大哥您的回复,这种把向量扩矩阵再点乘比直接for要快得多,在GPU上效果也很好。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表