【问题标题】:MATLAB : cellfun and two variables functionMATLAB:cellfun和两个变量函数
【发布时间】:2017-10-28 08:44:57
【问题描述】:

temptemp 是 1 X 44 单元格:每个单元格都是 1 X 3130 数组双精度。

tempwmul 是 1 X 44 单元:每个单元都是 1 X 1 训练网络。

我想用相对数组 double 模拟每个网络:

for ilog=1:44

tempoutemp{ilog} = sim(tempwmul{ilog},temptemp{ilog}); 

end

在矢量化模式下使用 cellfun :

tempoutemp=cellfun(@sim,tempwmul,temptemp,'UniformOutput', false);

代码不会返回错误,但在矢量化模式下,它始终使用第一个网络 对于所有数组数据和结果显然不同...一些帮助?

【问题讨论】:

  • tempoutemp=cellfun(@sim,tempwmul.',temptemp,'UniformOutput', false); 这样称呼它有帮助吗?对于像bsxfun 这样的东西,至少你需要有不相等的单例维度。
  • cellfun 不是矢量化模式
  • 我用 tempotemp=cellfun(@sim,tempwmul.',temptemp,'UniformOutput', false);返回:使用 cellfun 时出错所有输入参数的大小和形状必须相同。以前的输入在维度 1 中的大小为 44。输入 #3 的大小为 1。您确定所有撇号和逗号都正确吗?
  • 看来 cellfun 是一种矢量化模式:file:///D:/Documents%20and%20Settings/Emi/Documenti/MATLAB/TEMP/cellfun/New%20Functions%20for%20Vectorizing%20Operations% 20on%20Any%20Data%20Type%20-%20MATLAB%20&%20Simulink.htm

标签: matlab vectorization cell-array


【解决方案1】:

正如 Sardar Usama 所说:据我所知,cellfun 不是矢量化模式。

无论如何,如果你真的喜欢使用函数式风格(出于风格的原因,而不是为了性能),我想你可以这样做:

tempoutemp = arrayfun (@(idx) sim(tempwmul{idx}, temptemp{idx}), 1 : length(temptemp), 'Uni', 0);

【讨论】:

  • 其他方式,使用 cellfun:1) 定义一个新的数据结构,其中每一行定义您的输入。所以元素 i 将是 {tempwmul{i}, temptemp{i} } 那么它将是 cellfun(@(x) sim(x{:}, newStruct, 'Uni', 0);
  • 我试过了: tempotemp = arrayfun (@(idx) sim(tempwmul{idx}, temptemp{idx}), 1 : length(temptemp), 'Uni', 0);它可以工作,但我有同样的问题:它总是使用第一个网络来模拟所有数据集。
  • cellfun(@(x) sim(x{:}), newStruct, 'Uni', 0);你能更好地解释一下你对 newStruct 意味着什么吗?它是一个 44X2 细胞,其中每个细胞都是 1X1 细胞吗?我试了很多次都失败了!
  • temptemp 的长度是 44 吗?如果你运行 size(temptemp) 你会得到什么?和长度(temptemp)?
  • 它写在我的主要问题中:temptemp 是 1 X 44 单元格:每个单元格都是 1 X 3130 数组双倍。 tempwmul 是 1 X 44 单元:每个单元都是 1 X 1 训练有素的网络。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
相关资源
最近更新 更多