Inner matrix dimensions must agree

两盒软妹~` 提交于 2020-01-04 10:11:34

问题


I have a matrix A and a vector x:

A is a 50x30 matrix

x is a 1x30 vector

I want to multiply A by x, yet whenever I try z = A * x I get the error Inner matrix dimensions must agree. Yet surely with the same amount of columns the matrix dimensions do agree?

I'm confused as to why this works:

A = rand(2,2);
x = [1;2];
A * x

Yet this does not work:

A = rand(2,2);
x = 1:2;
A * x

回答1:


Transpose the second argument:

z = A * x.'

As the error suggest - the inner matrix dimensions must agree - you have A = [50x30] and x = [1x30], the inner dimensions are 30 and 1.

By tranposing you get A = [50x30] and x = [30x1], the inner dimensions are then 30 and 30, agreeing.




回答2:


In your first example, x is 2 by 1. In the second example, x is 1 by 2.

Notice you are using ;(semi-colon) in first example and :(colon) in the second example. You may verify the dimensions by size(x) for both examples.




回答3:


In order to multiply A by a vector from the right the vector must be 30-by-1 and not 1-by-30 - this is the reason for the error you are getting. To solve

z = A * x.';



回答4:


x = [1;2]; creates a column vector [1;2]. In contrast, the command x = 1:2; creates a row vector [1 2]. Because of that, the matrix multiplication fails for the second example.



来源:https://stackoverflow.com/questions/28850858/inner-matrix-dimensions-must-agree

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!