matlab怎么用矩阵运算代替for循环
a{m,n}是一个M*N的cell,每个cell是一个1*3的向量,b{j,k}是一个J*k的cell,每个cell也是一个1*3的向量,现在想实现一个新的四维矩阵c(m...
a{m,n}是一个M*N的cell,每个cell是一个1*3的向量,b{j,k}是一个J*k的cell,每个cell也是一个1*3的向量,现在想实现一个新的四维矩阵c(m,n,j,k)=dot(a{m,n},b{j,k}),用for循环实在太慢,怎么用矩阵运算代替?
展开
展开全部
要计算三维矩阵每一层的norm的话,用for是比较合适的,如果必须不用for的话,你可以试试这个流程:
>> a = randn( 2, 2, 3 )
a(:,:,1) =
0.3129 -0.0301
-0.8649 -0.1649
a(:,:,2) =
0.6277 1.1093
1.0933 -0.8637
a(:,:,3) =
0.0774 -1.1135
-1.2141 -0.0068
>> a1 = cellfun( @( x ) norm( x ), num2cell( a, [ 1 2 ] ) );
>> a1 = a1( : )
a1 =
0.9312
1.4482
1.2260
思路就是把三维矩阵转为一个元胞序列,元胞里的每个元素就是原始矩阵的每一层,然后利用cellfun函数进行批量计算。
>> a = randn( 2, 2, 3 )
a(:,:,1) =
0.3129 -0.0301
-0.8649 -0.1649
a(:,:,2) =
0.6277 1.1093
1.0933 -0.8637
a(:,:,3) =
0.0774 -1.1135
-1.2141 -0.0068
>> a1 = cellfun( @( x ) norm( x ), num2cell( a, [ 1 2 ] ) );
>> a1 = a1( : )
a1 =
0.9312
1.4482
1.2260
思路就是把三维矩阵转为一个元胞序列,元胞里的每个元素就是原始矩阵的每一层,然后利用cellfun函数进行批量计算。
追问
你答的这是啥啊??答非所问啊
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |