bool IsValid(IValueMapper mapper, ref DataViewType inputType) { // inputType if (mapper == null) { return(false); } if (mapper.OutputType != NumberDataViewType.Single) { return(false); } if (!mapper.InputType.IsVector() || mapper.InputType.ItemType() != NumberDataViewType.Single) { return(false); } if (inputType == null) { inputType = mapper.InputType; } else if (inputType.VectorSize() != mapper.InputType.VectorSize()) { if (inputType.VectorSize() == 0) { inputType = mapper.InputType; } else if (mapper.InputType.VectorSize() != 0) { return(false); } } return(true); }
public override ValueMapper <VBuffer <float>, VBuffer <float> > GetMapper() { var maps = new ValueMapper <VBuffer <float>, float, float> [_mappers.Length]; for (int i = 0; i < _mappers.Length; i++) { maps[i] = _mappers[i].GetMapper <VBuffer <float>, float, float>(); } return ((in VBuffer <float> src, ref VBuffer <float> dst) => { if (_inputType.VectorSize() > 0) { Contracts.Check(src.Length == _inputType.VectorSize()); } var values = dst.Values; if (Utils.Size(values) < maps.Length) { values = new float[maps.Length]; } var tmp = src; Parallel.For(0, maps.Length, i => { float score = 0; maps[i](in tmp, ref score, ref values[i]); });