[英]Creating Matrix with a loop in Matlab
我想創建以下形式的矩陣
Y = [1 x x.^2 x.^3 x.^4 x.^5 ... x.^100]
令x為列向量。 甚至更多的變體,例如
Y = [1 x1 x2 x3 (x1).^2 (x2).^2 (x3).^2 (x1.x2) (x2.x3) (x3.x1)]
令x1,x2和x3為列向量讓我們考慮第一個。 我嘗試使用類似
Y = [1 : x : x.^100]
但這也不起作用,因為這意味着取Y = [1 x 2. * x 3. * x ... x。^ 100]嗎? (即,所有1到x。^ 100之間的值都具有x差)因此,這也不能用於生成這樣的矩陣。 請考慮x = [1; 2; 3; 4]; 並提出一種生成該矩陣的方法
Y = [1 1 1 1 1;
1 2 4 8 16;
1 3 9 27 81;
1 4 16 64 256];
無需手動編寫
Y = [ones(size(x,1)) x x.^2 x.^3 x.^4]
使用此bsxfun
技術-
N = 5; %// Number of columns needed in output
x = [1; 2; 3; 4]; %// or [1:4]'
Y = bsxfun(@power,x,[0:N-1])
輸出-
Y =
1 1 1 1 1
1 2 4 8 16
1 3 9 27 81
1 4 16 64 256
如果x = [1 2; 3 4; 5 6]
x = [1 2; 3 4; 5 6]
x = [1 2; 3 4; 5 6]
並且您希望Y = [1 1 1 2 4; 1 3 9 4 16; 1 5 25 6 36]
Y = [1 1 1 2 4; 1 3 9 4 16; 1 5 25 6 36]
Y = [1 1 1 2 4; 1 3 9 4 16; 1 5 25 6 36]
即Y = [ 1 x1 x1.^2 x2 x2.^2 ]
對於列向量x1
, x2
...,您可以使用這種單線-
[ones(size(x,1),1) reshape(bsxfun(@power,permute(x,[1 3 2]),1:2),size(x,1),[])]
使用Matlabs vander()-Function中找到的代碼的改編版(也可以在polyfit-function中找到),與Divakars不錯的簡短解決方案相比,如果您使用以下代碼,則可以顯着提高速度:
N = 5;
x = [1:4]';
V(:,n+1) = ones(length(x),1);
for j = n:-1:1
V(:,j) = x.*V(:,j+1);
end
V = V(:,end:-1:1);
對於給定的示例,它的速度大約是它的兩倍,如果我將N=50
設置N=50
x = [1:40]'
,它的速度大約是它的20倍。 盡管我說比較時間並不容易,但是如果速度是一個問題,可以選擇一種解決方案。
以八度為單位,廣播允許寫
N=5;
x = [1; 2; 3; 4];
y = x.^(0:N-1)
輸出-
y =
1 1 1 1 1
1 2 4 8 16
1 3 9 27 81
1 4 16 64 256
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.