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); }
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); } }