R:为什么这个外部通话这么慢?我如何加快速度?

时间:2020-02-03 11:33:05

标签: r

struct ContentView: View { @State var number: Int = 5 var body: some View { VStack { NumberPicker(format: "%02d", max: 20, value: $number) Text("You picked \(number)") } } } 是两个不同长度的向量。我需要建立一个包含元素struct NumberPicker: View { var format: String = "%d" var max: Int @Binding var value: Int var body: some View { Picker("", selection: $value) { ForEach(0..<max) { item in Text(String(format: self.format, item)) } } .frame(width: 40, height: 175) .clipped() } } 的矩阵,这意味着对于a, b中的每一对元素,我都想乘以虚数单位,然后取指数。

好的,所以我拉出外部函数并编写

exp(-1i*a*b)

但是对于大向量a, b,这很慢。我真的很惊讶它这么慢。我要做的只是建立矩阵-我什至没有在任何计算中使用它,但这太慢了。

是否有其他方法可以加快速度?

1 个答案:

答案 0 :(得分:2)

您正在使用什么BLAS?默认值是很慢的。

您可以安装OpenBLAS,这明显更快。

在我的系统上运行

a <- runif(1e5, -2, 2) 
b <- runif(2e3, -4,3)
t <- exp(-1i*tcrossprod(a, b))

耗时10秒,生成3Gb矩阵。

  • Manjaro Linux
  • R-3.6.2
  • OpenBLAS
  • i7 1065 16Gb RAM