1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
|
/*=========================================================================
Program: Visualization Toolkit
Module: vtkDotProductSimilarity.h
-------------------------------------------------------------------------
Copyright 2008 Sandia Corporation.
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
the U.S. Government retains certain rights in this software.
-------------------------------------------------------------------------
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkDotProductSimilarity - compute dot-product similarity metrics.
//
// .SECTION Description
// Treats matrices as collections of vectors and computes dot-product similarity
// metrics between vectors.
//
// The results are returned as an edge-table that lists the index of each vector
// and their computed similarity. The output edge-table is typically used with
// vtkTableToGraph to create a similarity graph.
//
// This filter can be used with one or two input matrices. If you provide a single
// matrix as input, every vector in the matrix is compared with every other vector. If
// you provide two matrices, every vector in the first matrix is compared with every
// vector in the second matrix.
//
// Note that this filter *only* computes the dot-product between each pair of vectors;
// if you want to compute the cosine of the angles between vectors, you will need to
// normalize the inputs yourself.
//
// Inputs:
// Input port 0: (required) A vtkDenseArray<double> with two dimensions (a matrix).
// Input port 1: (optional) A vtkDenseArray<double> with two dimensions (a matrix).
//
// Outputs:
// Output port 0: A vtkTable containing "source", "target", and "similarity" columns.
//
// .SECTION Caveats
// Note that the complexity of this filter is quadratic! It also requires dense arrays
// as input, in the future it should be generalized to accept sparse arrays.
//
// .SECTION Thanks
// Developed by Timothy M. Shead (tshead@sandia.gov) at Sandia National Laboratories.
#ifndef vtkDotProductSimilarity_h
#define vtkDotProductSimilarity_h
#include "vtkInfovisCoreModule.h" // For export macro
#include "vtkTableAlgorithm.h"
class VTKINFOVISCORE_EXPORT vtkDotProductSimilarity : public vtkTableAlgorithm
{
public:
static vtkDotProductSimilarity* New();
vtkTypeMacro(vtkDotProductSimilarity, vtkTableAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Controls whether to compute similarities for row-vectors or column-vectors.
// 0 = rows, 1 = columns.
vtkGetMacro(VectorDimension, vtkIdType);
vtkSetMacro(VectorDimension, vtkIdType);
// Description:
// When computing similarities for a single input matrix, controls whether the
// results will include the upper diagonal of the similarity matrix. Default: true.
vtkGetMacro(UpperDiagonal, int);
vtkSetMacro(UpperDiagonal, int);
// Description:
// When computing similarities for a single input matrix, controls whether the
// results will include the diagonal of the similarity matrix. Default: false.
vtkGetMacro(Diagonal, int);
vtkSetMacro(Diagonal, int);
// Description:
// When computing similarities for a single input matrix, controls whether the
// results will include the lower diagonal of the similarity matrix. Default: false.
vtkGetMacro(LowerDiagonal, int);
vtkSetMacro(LowerDiagonal, int);
// Description:
// When computing similarities for two input matrices, controls whether the results
// will include comparisons from the first matrix to the second matrix.
vtkGetMacro(FirstSecond, int);
vtkSetMacro(FirstSecond, int);
// Description:
// When computing similarities for two input matrices, controls whether the results
// will include comparisons from the second matrix to the first matrix.
vtkGetMacro(SecondFirst, int);
vtkSetMacro(SecondFirst, int);
// Description:
// Specifies a minimum threshold that a similarity must exceed to be included in
// the output.
vtkGetMacro(MinimumThreshold, double);
vtkSetMacro(MinimumThreshold, double);
// Description:
// Specifies a minimum number of edges to include for each vector.
vtkGetMacro(MinimumCount, vtkIdType);
vtkSetMacro(MinimumCount, vtkIdType);
// Description:
// Specifies a maximum number of edges to include for each vector.
vtkGetMacro(MaximumCount, vtkIdType);
vtkSetMacro(MaximumCount, vtkIdType);
protected:
vtkDotProductSimilarity();
~vtkDotProductSimilarity();
int FillInputPortInformation(int, vtkInformation*);
int RequestData(
vtkInformation*,
vtkInformationVector**,
vtkInformationVector*);
private:
vtkDotProductSimilarity(const vtkDotProductSimilarity&); // Not implemented
void operator=(const vtkDotProductSimilarity&); // Not implemented
vtkIdType VectorDimension;
double MinimumThreshold;
vtkIdType MinimumCount;
vtkIdType MaximumCount;
int UpperDiagonal;
int Diagonal;
int LowerDiagonal;
int FirstSecond;
int SecondFirst;
};
#endif
|