Exemple #1
0
            private bool IsDiag(Matrix <T> value, Func <T, bool> diagPred)
            {
                if (value.Size0 != value.Size1)
                {
                    return(false);
                }

                for (int i = 0; i < value.Size0; i++)
                {
                    for (int j = 0; j < value.Size1; j++)
                    {
                        if (i == j)
                        {
                            if (!_elemTraits.IsOne(value[i, j]))
                            {
                                return(false);
                            }
                        }
                        else
                        {
                            if (!diagPred(value[i, j]))
                            {
                                return(false);
                            }
                        }
                    }
                }
                return(true);
            }
Exemple #2
0
            private bool IsDiag(Box <T> value, Func <T, bool> diagPred)
            {
                if (value.Sizes.Skip(1).All(s => s == value.Sizes[0]))
                {
                    return(false);
                }

                if (value.Rank == 0)
                {
                    return(_elemTraits.IsOne(value.GetElement()));
                }
                else
                {
                    foreach (var index in Box.EnumerateFromLoToHi(value.Sizes.ToArray()))
                    {
                        bool isDiag = true;
                        for (int i = 1; i < index.Length; i++)
                        {
                            if (index[i] != index[0])
                            {
                                isDiag = false;
                                break;
                            }
                        }
                        if (isDiag)
                        {
                            if (!diagPred(value.ElementAt(index)))
                            {
                                return(false);
                            }
                        }
                        else
                        {
                            if (!_elemTraits.IsZero(value.ElementAt(index)))
                            {
                                return(false);
                            }
                        }
                    }
                    return(true);
                }
            }