Error using .* Matrix Dimensions must agree
古いコメントを表示
Hello! I am attempting to find the area of grid cells using two vectors, 1)latitude which is 224 X 1 and 2)longitude which is 240 X 1. The code I am using to do so is
R=6371
x=diff(latitude1)
y=diff(longitude)
Area_grid_points=(((2*pi*R)/360)^2).*cos(latitude1).*x.*y
Unfortunately when I use this code I receive the error "Error using .* Matrix Dimensions must agree." I am assuming that I receive this error because cos(latitude1) produces an array of 224*1 which is different than that produced by diff(longitude1) which is 240 X 1. Can anyone direct me in the right direction to correct this discrepancy? Thanks so much!
回答 (3 件)
Kelly Kearney
2014 年 8 月 25 日
Well, diff is always going to return a result 1 element shorter than the input, since it's measuring the distance between elements. In your case, you'll have to decide what latitude you want to correspond to each grid cell: top? bottom? middle?
I usually choose the midpoint for things like this:
R=6371
x=diff(latitude1)
y=diff(longitude)
latmid = (latitude(1:end-1)+latitude(2:end))./2;
Area_grid_points=(((2*pi*R)/360)^2).*cos(latmid).*x.*y;
3 件のコメント
Star Strider
2014 年 8 月 25 日
The gradient function is an alternative to diff, with output sizes matching inputs. Don’t know if it would be appropriate here, though.
Stephanie Goldstein
2014 年 8 月 25 日
Kelly Kearney
2014 年 8 月 25 日
編集済み: Kelly Kearney
2014 年 8 月 25 日
I was assuming that lattitude and longitude were the same size, but apparently not. Assuming that both latitude and logitude are row vectors, representing the edges of a rectangular (in lat/lon space) region, perhaps you want:
R = 6371
x = diff(latitude1);
y = diff(longitude);
latmid = (latitude(1:end-1)+latitude(2:end))./2;
Area_grid_points = (2*pi*R/360)^2 .* y' * (cos(latmid).* x);
Note that my use of matrix multiplication with a column and row vector is a shortcut for expanding the two vectors into a full grid.
If you want element by element multiplication you should use .* instead of *. whether you want this or matrix multiplication, the number of elements and size of your array should be congruent.
Maybe you are looking for something like bsxfun() instead:
bsxfun(@times, latitude, longitude')
2 件のコメント
Stephanie Goldstein
2014 年 8 月 25 日
José-Luis
2014 年 8 月 25 日
Well, I don't know. How do you get the latitude and longitude vectors in the first place.
doc bsxfun
Sajjad Ali
2017 年 7 月 4 日
編集済み: Sajjad Ali
2017 年 7 月 4 日
0 投票
I am also getting error Error using . Matrix dimensions must agree.* in following line of code _[m,n]=size(thick_image(:,:,1));
indTerm=sub2ind([m,n],CentroidTerm(:,1),CentroidTerm(:,2));
Z=zeros(m,n);
Z(indTerm)=1;
ZTerm=Z.*ROI';
[CentroidTermX,CentroidTermY]=find(ZTerm);_ can any one help me to resolve this issue?
2 件のコメント
Walter Roberson
2017 年 7 月 4 日
You do not say what size of ROI is
Jan
2017 年 7 月 4 日
Please create a new thread for a new question and remove this message here. Otherwise it gets unclear to which question an answer belongs and the Accepted status is meaningless. Thanks.
カテゴリ
ヘルプ センター および File Exchange で MATLAB についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!