【发布时间】:2015-03-09 07:04:19
【问题描述】:
我需要在矩阵的列上应用一个函数。假设我有这个矩阵--
>> m = rand(3,3)
m =
0.8626 0.5661 0.8489
0.6830 0.1498 0.1401
0.0857 0.4775 0.3296
还有上下界的两个向量--
>> mins = [2 3 5]
mins =
2 3 5
>> maxs = [7 11 13]
maxs =
7 11 13
现在我要做的是将矩阵拆分为列--
>> cols = num2cell(m, 1)
cols =
[3x1 double] [3x1 double] [3x1 double]
现在我正在尝试对每列应用一个函数,该函数采用下限和上限来规范化列值,更具体地说 我想用 mins(1) 和 @ 规范化列 m(:,1) 987654326@、m(:,2) 和 mins(2) 和 maxs(2) ... 列 m(:,n) 和 mins(n) 和 maxs(n) 等等。 我的看法是这样的——
>> norm_cols = cellfun(@(c, lb, ub) (ub - lb) .* c + lb, cols, mins, maxs);
Error using cellfun
Input #3 expected to be a cell array, was double instead.
我的问题是这样的事情在 matlab 中可行吗?并且可以说这是可行的,那么如何将拆分的列再次合并到矩阵中?
此外,请注意我知道循环,但我不想使用它(因为我的矩阵可以像 1000x1000 一样增长),所以请不要提供任何使用循环的解决方案。虽然我不确定函数映射是否可以比循环提供更好的加速(这是另一个问题,但不是今天)。
【问题讨论】:
-
@Nitish 好吧,“规范化”是我认为不好的词选择,我想在列中的每个值上应用
min + (max - min) * x。 -
嗯。那个糟糕的词选择让我在错误的方向上工作了一段时间!