【问题标题】:How to make a multivariate function take a matrix as input and return a vector as output?如何使多元函数将矩阵作为输入并返回向量作为输出?
【发布时间】:2015-11-26 12:19:54
【问题描述】:

对不起,如果这个问题已经被问死了。假设我定义了一个这样的函数

function out = myfun (x)
out = x(1).^2 + x(2).^2;
end

给出一个矩阵如

X = unifrnd(0,1,100,2);

我想得到一个向量 Y 使得 i =1,2,...100,

Y(i) = myfun(X(i,:));

有什么函数可以用来避免循环吗?

【问题讨论】:

  • X 是否总是 2 列大小?
  • @BillBokeey 对不起,应该是 X = unifrnd(0,1,100,2);

标签: matlab function matrix vector


【解决方案1】:

unifrnd(100,2) 这里不是问题吗?

unifrnd 来自连续均匀分布的随机数组。

R = unifrnd(A,B) 返回从随机数中选择的数组 在从 A 到 B 的区间上连续均匀分布。大小 如果两者都是数组,则 R 的大小是 A 和 B 的共同大小。如果要么 参数是一个标量,R的大小是另一个的大小 范围。

R = unifrnd(A,B,M,N,...) 或 R = unifrnd(A,B,[M,N,...]) 返回一个 M×N×... 数组。


现在回答问题...

将函数更改为在输入的列上工作...
这对于按元素的幂和索引列来说相对简单......

function out = myfun (X)
out = X(:,1).^2 + X(:,2).^2;
end

用法...

lower_lim = 0
upper_lim = 1
X = unifrnd(lower_lim,upper_lim,100,2)
Y = myfun(X)

【讨论】:

  • 对不起我的错误。您的解决方案完全可行。谢谢。
  • 不用担心,多加一点评论:如果整个数组来自同一个分布 unifrnd 有点矫枉过正,只需 rand(100,2) 就足以满足 0-1 的范围或缩放到最小-最大min+rand(100,2)*(max-min)
猜你喜欢
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 1970-01-01
  • 2018-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多