标签: variance

我可以用TraversableLike.map的类似物来"pimp my library"吗?它具有很好的变体类型?

假设我要像功能添加map到斯卡拉List,沿着线的东西list mapmap f,其功能适用f于每个元素list的两倍.(一个更严重的例子可能是实现并行或分布式地图,但我不想被那个方向的细节分心.)

我的第一种方法是

object MapMap {
    implicit def createFancyList[A](list: List[A]) = new Object {
        def mapmap(f: A => A): List[A] = { list map { a: A => f(f(a)) } }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在这很好用

scala> import MapMap._
import MapMap._

scala> List(1,2,3) mapmap { _ + 1 }
res1: List[Int] = List(3, 4, 5)
Run Code Online (Sandbox Code Playgroud)

当然除了这只是为ListS,而且也没有理由我们不应该想这对任何工作Traverseable,具有map功能,例如SetS或Stream秒.所以第二次尝试看起来像

object MapMap2 {
    implicit def …
Run Code Online (Sandbox Code Playgroud)

scala variance implicit-conversion scala-collections

7
推荐指数
2
解决办法
705
查看次数

我可以有一个既有协变性又有逆变性的类型,即完全可替换的子类型和超级类型?

我可以有一个类型(现在忘记它的语义),它可以是协变的还是逆变的?

例如:

public interface Foo<in out T>
{
    void DoFooWith(T arg);
}
Run Code Online (Sandbox Code Playgroud)

关于Eric Lippert的博客,了解C#4.0中的差异肉和土豆,因为除此之外几乎没有什么能够涵盖这个主题的充分理由.


无论如何我试了一下,不仅不允许这样做,而且它告诉我,我错过了重点.我需要理解只读,只写和方差之间的联系.

我想我还有更多的阅读要做.

但同时,欢迎任何短暂的,顿悟的诱导答案.

covariance contravariance variance c#-4.0

6
推荐指数
1
解决办法
624
查看次数

是否可以在Scala中更改基类/特征的方差?

我想从Scala的不可变映射派生出来.它定义如下:

trait Map[A, +B]
Run Code Online (Sandbox Code Playgroud)

不幸的是,我的实现需要在B中保持不变.我尝试了以下内容,但没有成功:

def +(kv : (A, B)) : MyMap[A, B] = { ... }

override def +[B1 >: B](kv : (A, B1)) : MyMap[A, B1] =
    throw new IllegalArgumentException()
Run Code Online (Sandbox Code Playgroud)

也许有一招@uncheckedVariance

scala variance

6
推荐指数
1
解决办法
157
查看次数

无法使用动态mixin类型为键添加成员到Map

以下语句编译正常并按预期工作:

val map : Map[_ >: Int with String, Int] = Map(1 -> 2, "Hello" -> 3)
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试添加到地图:

map + ((3,4))
Run Code Online (Sandbox Code Playgroud)

要么

map + (("Bye", 4))
Run Code Online (Sandbox Code Playgroud)

然后我得到一个类型不匹配:

发现:java.lang.String("Bye")

required:_ $ 1其中type _ $ 1>:Int with String

如果我弱化类型签名以允许Any作为Key的类型,那么这一切都按预期工作.

我的直觉说这与Map的键类型的不变性有关,并且_ $ 1在某种程度上被固定为特定的超类型Int with String,但我对此并不特别满意.谁能解释一下发生了什么?

编辑添加:

如果您想知道这出现在哪里,那么如果您执行以下操作,则会获得签名:

val map = if (true) Map(1 -> 2) else Map("1" -> 2)
Run Code Online (Sandbox Code Playgroud)

types scala mixins variance

6
推荐指数
1
解决办法
320
查看次数

使用sqlite/PHP获得两个不同行/列中两个数字的方差和标准差

我有一个具有以下结构的SQLite数据库:

rowid       ID                  startTimestamp   endTimestamp   subject
1           00:50:c2:63:10:1a   1000             1090           entrance
2           00:50:c2:63:10:1a   1100             1270           entrance
3           00:50:c2:63:10:1a   1300             1310           door1
4           00:50:c2:63:10:1a   1370             1400           entrance
.
.
.
Run Code Online (Sandbox Code Playgroud)

我在这里准备了一个sqlfiddle:http://sqlfiddle.com/#!2/fe8c6/2

使用此SQL-Query,我可以获得endTime和一行与下一行之间的startTime之间的平均差异,按主题和ID排序:

SELECT
    id,
    ( MAX(endtimestamp) - MIN(startTimestamp)
    - SUM(endtimestamp-startTimestamp)
    ) / (COUNT(*)-1) AS averageDifference
FROM
    table1
WHERE ID = '00:50:c2:63:10:1a'
AND subject = 'entrance'
GROUP BY id;
Run Code Online (Sandbox Code Playgroud)

我的问题:要计算平均值是没有问题的,这就是查询.但是,我怎样才能得到标准偏差和这些值的方差?

php sql sqlite variance

6
推荐指数
1
解决办法
1万
查看次数

接口继承与通用列表

我想为一个简单的项目构建一个生产者和消费者的通用系统.

我现在拥有的是什么

public interface IMessage     {    }
public interface Message1 : IMessage    {    }
public interface Message2 : IMessage    {    }
public interface IConsumer<T>    {    }
public interface IProducer<T>    {    }

public class Mop1 : IConsumer<Message1>, IProducer<Message2>
{
}



class Program
{
    static void Main(string[] args)
    {
        var list = new List<IConsumer<IMessage>>();
        var mop = new Mop1();
        list.Add(mop);   // Error occurs here
    }
}
Run Code Online (Sandbox Code Playgroud)

最后一行给出了一个错误 cannot convert from 'Mop1' to 'IConsumer<GenericPubSub.IMessage>'

但是Mop1实现了IMessage派生类型的IConsumer.这是一些差异问题吗?这有什么问题?

c# generics interface variance

6
推荐指数
2
解决办法
543
查看次数

使用 Welford 方法计算单通道方差时删除先前样本

我成功地使用 Welford 的方法来计算运行方差和标准差,正如 Stack Overflow 和John D Cook 的优秀博客文章中多次描述的那样。

然而,在样本流中,有时我会遇到“回滚”或“删除样本”命令,这意味着先前的样本不再有效,应从计算中删除。我知道要移除的样本的价值以及处理时间。但我正在使用 Welford,因为我无法返回再次遍历所有数据。

是否有一种算法可以成功调整我的运行方差以删除或否定特定的先前处理的样本?

algorithm math statistics variance standard-deviation

6
推荐指数
1
解决办法
1272
查看次数

如何在C#中获得拉普拉斯方差

简而言之,我试图使用 OpenCVSharp 作为 C# 函数的一部分来计算图像的清晰度。

作为第一次尝试,我使用了拉普拉斯滤波器,如下所示:

int kernel_size = 3;
int scale = 1;
int delta = 0;
int ddepth = image.Type().Depth;

Mat sharpenedImage = image.Laplacian(ddepth, kernel_size, scale, delta);

\* calculate the variance of the laplacian*\
Run Code Online (Sandbox Code Playgroud)

最后,我想要 this 的方差sharpenedImage

我已经在 Python 中轻松尝试过:

def variance_of_laplacian(image):
    lap_val = cv2.Laplacian(image, cv2.CV_8UC1)
    return lap_val.var()
Run Code Online (Sandbox Code Playgroud)

lap_val.var()那么C# 中有类似的东西吗?

我找不到任何与此相关的匹配文章。谢谢你!

c# opencv variance

6
推荐指数
1
解决办法
2280
查看次数

R 中的 NearZeroVar 是什么?

我有相当大的数据集,我想在其中排除方差相当低的列,这就是为什么我想使用短语 NearZeroVar。但是,我确实很难理解 freqCut 和 uniqueCut 的作用以及它们如何相互影响。我已经阅读了 R 中的解释,但这并没有真正帮助我解决这个问题。如果有人能给我解释一下,我将非常感激!

statistics r variance r-caret

6
推荐指数
1
解决办法
3760
查看次数

Rust 中 Box&lt;dyn FnOnce(T)&gt; 的协方差

我有一个函数需要一个短暂的对象。我希望我总是能够将一个长寿的对象传递给它。但当我尝试对其进行编码时,出现了一个奇怪的错误:

type F<'arg> = Box<dyn FnOnce(&'arg ())>;
fn contravar<'small, 'large: 'small>(f: F<'small>) -> F<'large> {
    f
}
Run Code Online (Sandbox Code Playgroud)

操场

特别:

error: lifetime may not live long enough
 --> src/lib.rs:3:5
  |
2 | fn contravar<'small, 'large: 'small>(f: F<'small>) -> F<'large> {
  |              ------  ------ lifetime `'large` defined here
  |              |
  |              lifetime `'small` defined here
3 |     f
  |     ^ function was supposed to return data with lifetime `'large` but it is returning data with lifetime `'small`
  |
  = help: consider adding …
Run Code Online (Sandbox Code Playgroud)

contravariance lifetime variance rust

6
推荐指数
1
解决办法
235
查看次数