Class DistributionRefArray<T, DomainType>
A distribution over an array of type DomainType
, where each element is independent and has distribution of type T
Inheritance
Implements
Inherited Members
Namespace: Microsoft.ML.Probabilistic.Distributions
Assembly: Microsoft.ML.Probabilistic.dll
Syntax
[Serializable]
[Quality(QualityBand.Mature)]
[DataContract]
public class DistributionRefArray<T, DomainType> : DistributionArray<T, DomainType>, IArray<T>, IList<T>, ICollection<T>, CanSetAllElementsTo<T>, IReadOnlyList<T>, IReadOnlyCollection<T>, IEnumerable<T>, IEnumerable, SettableTo<T[]>, SettableTo<Array<T>>, ConvertibleToArray, IDistribution<DomainType[]>, IDistribution, ICloneable, Diffable, SettableToUniform, HasPoint<DomainType[]>, CanGetLogProb<DomainType[]>, Sampleable<DomainType[]>, IArrayFactory<T, DistributionRefArray<T, DomainType>>, SettableTo<DistributionRefArray<T, DomainType>>, SettableToProduct<DistributionRefArray<T, DomainType>>, SettableToProduct<DistributionRefArray<T, DomainType>, DistributionRefArray<T, DomainType>>, SettableToRatio<DistributionRefArray<T, DomainType>>, SettableToRatio<DistributionRefArray<T, DomainType>, DistributionRefArray<T, DomainType>>, SettableToPower<DistributionRefArray<T, DomainType>>, SettableToWeightedSum<DistributionRefArray<T, DomainType>>, CanGetLogAverageOf<DistributionRefArray<T, DomainType>>, CanGetLogAverageOfPower<DistributionRefArray<T, DomainType>>, CanGetAverageLog<DistributionRefArray<T, DomainType>> where T : class, ICloneable, SettableTo<T>, SettableToProduct<T>, SettableToRatio<T>, SettableToPower<T>, SettableToWeightedSum<T>, CanGetLogAverageOf<T>, CanGetLogAverageOfPower<T>, CanGetAverageLog<T>, IDistribution<DomainType>, Sampleable<DomainType>
Type Parameters
Name | Description |
---|---|
T | Distribution type of an element |
DomainType | Domain type of an element |
Remarks
This is an extension of DistributionArray that requires T to be a reference type. The SetTo and CopyTo methods are overriden to use cloning instead of assignment.
Constructors
DistributionRefArray()
Parameterless constructor needed for serialization
Declaration
protected DistributionRefArray()
DistributionRefArray(T, Int32)
Creates a new distribution array given a value and a length
Declaration
public DistributionRefArray(T value, int length)
Parameters
Type | Name | Description |
---|---|---|
T | value | |
Int32 | length |
DistributionRefArray(T[])
Creates a new distribution array given an array of distributions
Declaration
public DistributionRefArray(T[] array)
Parameters
Type | Name | Description |
---|---|---|
T[] | array |
DistributionRefArray(Array<T>)
Copy constructor
Declaration
public DistributionRefArray(Array<T> that)
Parameters
Type | Name | Description |
---|---|---|
Array<T> | that |
DistributionRefArray(Int32)
Creates a distribution array given a length
Declaration
public DistributionRefArray(int length)
Parameters
Type | Name | Description |
---|---|---|
Int32 | length |
DistributionRefArray(Int32, Func<Int32, T>)
Create a distribution struct array of a specified length and initial values.
Declaration
public DistributionRefArray(int length, Func<int, T> init)
Parameters
Type | Name | Description |
---|---|---|
Int32 | length | |
Func<Int32, T> | init | Function that maps an index to a value. |
Remarks
The references returned by init
are not copied. They are placed directly into the array.
Methods
Clone()
Clones the array and the items in the array.
Declaration
public override object Clone()
Returns
Type | Description |
---|---|
Object |
Overrides
CopyTo(T[])
Set the parameters of array[i] to match the marginal distribution of element i, creating a new distribution if array[i] was null
Declaration
public override void CopyTo(T[] array)
Parameters
Type | Name | Description |
---|---|---|
T[] | array | Array to write into |
Overrides
CopyTo(T[], Int32)
Set the parameters of array[i] to match the marginal distribution of element i, creating a new distribution if array[i] was null, starting at a given index
Declaration
public override void CopyTo(T[] array, int arrayIndex)
Parameters
Type | Name | Description |
---|---|---|
T[] | array | |
Int32 | arrayIndex | The index to start at |
Overrides
CreateArray(Int32, Func<Int32, T>)
Declaration
public DistributionRefArray<T, DomainType> CreateArray(int length, Func<int, T> init)
Parameters
Type | Name | Description |
---|---|---|
Int32 | length | |
Func<Int32, T> | init |
Returns
Type | Description |
---|---|
DistributionRefArray<T, DomainType> |
GetAverageLog(DistributionRefArray<T, DomainType>)
The expected logarithm of that distribution under this distribution.
Declaration
public double GetAverageLog(DistributionRefArray<T, DomainType> that)
Parameters
Type | Name | Description |
---|---|---|
DistributionRefArray<T, DomainType> | that | The distribution to take the logarithm of. |
Returns
Type | Description |
---|---|
Double |
|
Remarks
This is also known as the cross entropy.
For a DistributionArray, this specializes to:
sum_i sum_x this[i].Evaluate(x)*Math.Log(that[i].Evaluate(x))
= sum_i this[i].GetAverageLog(that[i])
GetLogAverageOf(DistributionRefArray<T, DomainType>)
The log-probability that two distributions would draw the same sample.
Declaration
public double GetLogAverageOf(DistributionRefArray<T, DomainType> that)
Parameters
Type | Name | Description |
---|---|---|
DistributionRefArray<T, DomainType> | that |
Returns
Type | Description |
---|---|
Double |
|
Remarks
This can be considered a type of inner product between distributions.
Another name might be "LogAverage" to go with "GetAverageLog".
For a DistributionArray, this specializes to:
sum_i Math.Log(sum_x this[i].Evaluate(x)*that[i].Evaluate(x))
= sum_i this[i].GetLogAverageOf(that[i])
GetLogAverageOfPower(DistributionRefArray<T, DomainType>, Double)
Get the integral of this distribution times another distribution raised to a power.
Declaration
public double GetLogAverageOfPower(DistributionRefArray<T, DomainType> that, double power)
Parameters
Type | Name | Description |
---|---|---|
DistributionRefArray<T, DomainType> | that | |
Double | power |
Returns
Type | Description |
---|---|
Double |
InitializeTo(T)
Initialise all the values in this array to clones of the given value
Declaration
protected void InitializeTo(T value)
Parameters
Type | Name | Description |
---|---|---|
T | value |
InitializeTo(T[])
Initialise the elements of this distribution array to clones of the given distributions
Declaration
protected void InitializeTo(T[] array)
Parameters
Type | Name | Description |
---|---|---|
T[] | array |
Remarks
Given array and this array must be the same length
Sample(DomainType[])
Get a sample from the distribution
Declaration
public override DomainType[] Sample(DomainType[] result)
Parameters
Type | Name | Description |
---|---|---|
DomainType[] | result | Where to put the results |
Returns
Type | Description |
---|---|
DomainType[] | A sample |
Overrides
SetAllElementsTo(T)
Set the parameters of this distribution so that all marginals equal the given distribution (by value)
Declaration
public override void SetAllElementsTo(T value)
Parameters
Type | Name | Description |
---|---|---|
T | value |
Overrides
SetItemsOf(T[])
Set the parameters of array[i] to match the marginal distribution of element i
Declaration
protected void SetItemsOf(T[] array)
Parameters
Type | Name | Description |
---|---|---|
T[] | array |
SetItemsOf(T[], Int32)
Set the parameters of array[i] to match the marginal distribution of element i, starting at a given index
Declaration
protected void SetItemsOf(T[] array, int arrayIndex)
Parameters
Type | Name | Description |
---|---|---|
T[] | array | |
Int32 | arrayIndex | The index to start at |
SetTo(T[])
Set the parameters of this distribution so that the marginals match the given distributions (by value)
Declaration
public override void SetTo(T[] array)
Parameters
Type | Name | Description |
---|---|---|
T[] | array |
Overrides
Remarks
Given array and this array must be the same length.
SetTo(DistributionRefArray<T, DomainType>)
Set the parameters of this distribution to match those of the given distribution (by value)
Declaration
public void SetTo(DistributionRefArray<T, DomainType> that)
Parameters
Type | Name | Description |
---|---|---|
DistributionRefArray<T, DomainType> | that |
SetToPower(DistributionRefArray<T, DomainType>, Double)
Set the parameters to represent the power of a source distribution to some exponent
Declaration
public void SetToPower(DistributionRefArray<T, DomainType> a, double exponent)
Parameters
Type | Name | Description |
---|---|---|
DistributionRefArray<T, DomainType> | a | The source distribution array |
Double | exponent | The exponent |
SetToProduct(DistributionRefArray<T, DomainType>, DistributionRefArray<T, DomainType>)
Set the parameters to represent the product of two distributions
Declaration
public void SetToProduct(DistributionRefArray<T, DomainType> a, DistributionRefArray<T, DomainType> b)
Parameters
Type | Name | Description |
---|---|---|
DistributionRefArray<T, DomainType> | a | The first distribution array |
DistributionRefArray<T, DomainType> | b | The second distribution array |
SetToRatio(DistributionRefArray<T, DomainType>, DistributionRefArray<T, DomainType>, Boolean)
Set the parameters to represent the ratio of two distributions
Declaration
public void SetToRatio(DistributionRefArray<T, DomainType> numerator, DistributionRefArray<T, DomainType> denominator, bool forceProper)
Parameters
Type | Name | Description |
---|---|---|
DistributionRefArray<T, DomainType> | numerator | The numerator distribution array |
DistributionRefArray<T, DomainType> | denominator | The denominator distribution array |
Boolean | forceProper | Argument passed to T.SetToRatio |
SetToSum(Double, DistributionRefArray<T, DomainType>, Double, DistributionRefArray<T, DomainType>)
Set the parameters to match the moments of a mixture of two distributions
Declaration
public void SetToSum(double weight1, DistributionRefArray<T, DomainType> a, double weight2, DistributionRefArray<T, DomainType> b)
Parameters
Type | Name | Description |
---|---|---|
Double | weight1 | The first weight |
DistributionRefArray<T, DomainType> | a | The first distribution array |
Double | weight2 | The second weight |
DistributionRefArray<T, DomainType> | b | The second distribution array |