请显示一个有关Java中协方差和逆方差的好例子。
协方差:
class Super {
Object getSomething(){}
}
class Sub extends Super {
String getSomething() {}
}
Sub#getSomething是协变的,因为它返回Super#getSomething的返回类型的子类(但完全填充了Super.getSomething()的协定)
逆差
class Super{
void doSomething(String parameter)
}
class Sub extends Super{
void doSomething(Object parameter)
}
Sub#doSomething是互变的,因为它采用了Super#doSomething的参数的超类的参数(但是,再次填充了Super#doSomething的协定)
注意:该示例在Java中不起作用。Java编译器将重载并且不会覆盖doSomething()-Method。其他语言也支持这种风格的互变。
泛型
对于泛型而言,这也是可能的:
List<String> aList...
List<? extends Object> covariantList = aList;
List<? super String> contravariantList = aList;
现在,你可以访问所有covariantList
不带通用参数的方法(因为它必须是“扩展对象”),但是吸气剂可以正常工作(因为返回的对象始终为“对象”类型)
相反的情况是正确的contravariantList
:你可以使用泛型参数访问所有方法(你知道它必须是“ String”的超类,因此你始终可以传递一个),但没有getter(返回的类型可以是String的任何其他超类型) )
协方差矩阵的逆矩阵,通常称为精度矩阵(precision matrix),它与部分相关矩阵(partial correlation matrix)成正比。 它给出部分独立性关系。换句话说,如果两个特征在其他特征上有条件地独立, 则精度矩阵中的对应系数将为零。这就是为什么估计一个稀疏精度矩阵是有道理的: 通过从数据中学习独立关系,协方差矩阵的估计能更好处理。这被称为协方差选择。 在小样本的情况,即
问题内容: 谁能解释我,编程语言理论中协变和逆变的概念吗? 问题答案: 协方差 非常简单,最好从某些收集类的角度来考虑。我们可以 参数化 的一些类型参数类。也就是说,我们的列表包含some 类型的元素。如果,列表将是协变的 S是Tiff列表的子类型List [S]是List [T]的子类型 (在这里,我使用数学定义 iff 表示 当且仅当 。) 也就是说,a 是一个 。如果有一些例程接受a 作为参
是协变量,但它不支持值类型,只支持引用类型。下面的简单代码编译成功: 但是从更改为将得到编译错误: 原因在MSDN中有解释: 我搜索了一下,发现有些问题提到的原因是值类型和引用类型之间的装箱。但我还是不太清楚为什么拳击是个什么原因? 有人能给出一个简单而详细的解释为什么协方差和逆方差不支持值类型,以及拳击是如何影响这一点的吗?
我正在尝试将一种基于马氏距离的方法转换为我的代码,该方法适用于图像,必须处理时间序列。这是Matlab代码,用户将图像作为输入传递,然后首先重塑它,然后计算平均值、协方差矩阵及其逆矩阵(他使用图像大小): 这是我的代码,在这里我用Python实现了第一部分。我没有图像,但有一个时间序列,其形状是(24230,30),这就是为什么我避免了重塑部分: 如果我尝试运行它,我会得到错误: 线性误差:奇异矩
我正在学习Scala中的函数式编程原理,在学习子类型和泛型时,我对协方差有一个困惑: 给定:或是的子类型 编辑: 下面是的定义:
你能解释一下第一行最后一个false输出,为什么它不是真的吗?