我有兩個浮點型變量:Matlab的單獨的輸出爲2個變量
x = 0.5;
y = 1.5;
我想他們樓:
x = floor(x);
y = floor(y);
我能做到在一個單一的命令?這產生了一個錯誤:
[x y] = floor([x y]);
我有兩個浮點型變量:Matlab的單獨的輸出爲2個變量
x = 0.5;
y = 1.5;
我想他們樓:
x = floor(x);
y = floor(y);
我能做到在一個單一的命令?這產生了一個錯誤:
[x y] = floor([x y]);
你可以寫你自己的包裝用於地板:
function varargout = myFloor(varargin)
for k = 1:nargin
varargout{k} = floor(varargin{k});
end
此功能顯示所需的行爲,如果你提供的X和Y兩個分開的參數
[a, b] = myFloor(x,y)
此結果在
a =
0
b =
1
如果你想使用連接數組[x y]
作爲輸入(如在你的例子),你可以使用下面的功能:
function varargout = myFloor(x)
for k = 1:numel(x)
varargout{k} = floor(x(k));
end
然後你會打電話
[a, b] = myFloor([x y])
這導致
a =
0
b =
1
不,這是不可能的。
Floor只能接受一個參數,因爲它可以從語法中看出。你可以看到下面的參考驗證:
如果
A = [0.5 1.5]
那麼你可以做
floor(A)
這將導致
ans = [0 1]
她E公司的一個例子:http://www.matlabtutorials.com/functions/floor.html
如果可能的話,我需要結果在單個命令中的x和y var – dynamic
然後答案是否定的。正如Fyre所說,floor()只能接受一個參數,實際上它可以是一個向量,但它會返回一個向量。 –
這裏只是添加一個隨機的想法...
建立在H.Muster解決方案上,您可能想要定義一個個性化的deal
功能,這就好比deal
同時也適用的功能,每個參數:
function varargout = myDeal(fun, varargin)
if nargin == 2
varargout(1:nargout) = {feval(fun, varargin{1})};
elseif nargin-1 == nargout
for k = 1:nargout
varargout{k} = feval(fun, varargin{k}); end
else
error('Argument count mismatch.');
end
end
這樣,您就可以多分配任何功能:
>> [x,y,z] = myDeal(@floor, 0.5, 0.6, 2.7)
x =
0
y =
0
z =
2
>> [x,y,z] = myDeal(@sin, pi/6)
x =
4.999999999999999e-01
y =
4.999999999999999e-01
z =
4.999999999999999e-01
>> [a, b] = myDeal(@fix, 10*rand(2), 8*rand(5))
a =
7 2
7 6
b =
5 2 4 1 6
1 4 5 1 1
0 1 7 2 7
3 6 7 6 2
7 2 4 2 1
這是個好主意! (+1) –
不錯........ – dynamic
@ yes123:它不會很快,至少不會像做矢量化方式那麼快。因此,我建議不要在任何「生產代碼」或性能敏感區域中使用它。 –
爲什麼是你「需要」的兩個變量分開嗎? –
沒有什麼特別的...但這是一個普遍的問題,可以應用於另一種用法。不要專注於x,y – dynamic
那麼爲什麼不使用'z = floor([x y])'?它肯定比@ H.Muster的解決方案更快......如果你必須的話,只需在某個點執行'x = z(:,1),y = z(:,2)'。 –