Scala 为什么DenseVector是可变集合?
通常(到目前为止总是)我尝试在Scala中使用不可变集合,特别是如果我将集合引用给程序的其他部分,我就不能意外地重写原始源代码。使用breeze,我想知道:为什么决定让DenseVector成为可变集合Scala 为什么DenseVector是可变集合?,scala,scala-breeze,Scala,Scala Breeze,通常(到目前为止总是)我尝试在Scala中使用不可变集合,特别是如果我将集合引用给程序的其他部分,我就不能意外地重写原始源代码。使用breeze,我想知道:为什么决定让DenseVector成为可变集合 这仅仅是在后台数组中使用的副作用(可能是不必要的)?如果是这样,为什么使用数组而不是另一个(不可变)集合?性能。虽然函数式编程提供了出色的抽象和紧凑的代码,但它通常不能提供最快的执行速度。Java数组提供的开销比Scala集合少得多,因此对于高度重复的数值操作也是如此。BreezeDenseVe
这仅仅是在后台数组中使用的副作用(可能是不必要的)?如果是这样,为什么使用数组而不是另一个(不可变)集合?性能。虽然函数式编程提供了出色的抽象和紧凑的代码,但它通常不能提供最快的执行速度。Java数组提供的开销比Scala集合少得多,因此对于高度重复的数值操作也是如此。Breeze
DenseVector
s也采用相同的方式,并由引擎盖下的java阵列支持。性能。虽然函数式编程提供了出色的抽象和紧凑的代码,但它通常不能提供最快的执行速度。Java数组提供的开销比Scala集合少得多,因此对于高度重复的数值操作也是如此。BreezeDenseVector
s也采用同样的方式,并在引擎盖下由java阵列支持
DenseVector
将大大降低速度。它可以包装一个不可变数组
,该数组包装一个数组
,但这将强制执行一些操作,这些操作可以通过就地复制来避免复制,可能会与专门化进行奇怪的交互,等等DenseVector
将大大降低速度。它可以包装一个不可变数组
,该数组包装一个数组
,但这将强制执行一些操作,这些操作可以通过就地复制来避免复制,可能会与专门化进行奇怪的交互,等等2.我似乎只对了一半:Execute
a=c(1,2);b=a;a[1]=0
在R中,a
将是023
,而b将是1233
。Scala中的等价物将是一个不可变的var
。尽管如此,如果DenseVector是不可变的,我将不得不编写a=a(1):=0
是的,Breeze在这方面的行为类似于Numpy,而不是R或Matlab(IIRC),这可能会让R/Matlab用户感到困惑。再次,我怀疑这是一个薄弱的原因(如果有的话)。我似乎只对了一半:Executea=c(1,2);b=a;a[1]=0
在R中,a
将是023
,而b将是1233
。Scala中的等价物将是一个不可变的var
。尽管如此,如果DenseVector是不可变的,我将不得不编写a=a(1):=0
是的,Breeze在这方面的行为类似于Numpy,而不是R或Matlab(IIRC),这可能会让R/Matlab用户感到困惑。我再次怀疑这是一个薄弱的原因(如果有的话)。