level 8
各位前辈,编译小白请教一个问题。
n = 300;
dat = Table[{1. i, j, .5 i}, {i, n}, {j, n}];
list = Table[If[i >= j, {i, j}, Nothing], {i, n - 1}, {j, n}];
f[dat_, list_] :=
Module[{dat0 = dat, p},
p[l_] := Plus @@ Sqrt[Plus @璐村惂鐢ㄦ埛_053SRMK馃惥 (# - Plus @@ l/Length[l] & /@ l)^2];
p /@ Apply[dat0[[##]] &, list, {2}]];
f[dat, list] // AbsoluteTiming
请问这个函数f可以编译吗?f每次输出一个大列表dat(固定维数)和一串list,list的行数一定但列数不定。f的作用其实类似于每次从大列表dat里取出list中所示位置的元素做方差。我看Total,Mean好像不能编译,是不是就不能出现在要编译的函数里啊?所以p这个写的很是奇怪。
谢谢各位前辈指点。
2019年09月23日 06点09分
1
n = 300;
dat = Table[{1. i, j, .5 i}, {i, n}, {j, n}];
list = Table[If[i >= j, {i, j}, Nothing], {i, n - 1}, {j, n}];
f[dat_, list_] :=
Module[{dat0 = dat, p},
p[l_] := Plus @@ Sqrt[Plus @璐村惂鐢ㄦ埛_053SRMK馃惥 (# - Plus @@ l/Length[l] & /@ l)^2];
p /@ Apply[dat0[[##]] &, list, {2}]];
f[dat, list] // AbsoluteTiming
请问这个函数f可以编译吗?f每次输出一个大列表dat(固定维数)和一串list,list的行数一定但列数不定。f的作用其实类似于每次从大列表dat里取出list中所示位置的元素做方差。我看Total,Mean好像不能编译,是不是就不能出现在要编译的函数里啊?所以p这个写的很是奇怪。
谢谢各位前辈指点。