Tensor Toolbox version 2.5 by Brett W. Bader, Tamara G. Kolda, Jimeng Sun, Evrim Acar, Daniel M. Dunlavy, Eric C. Chi, Jackson Mayo, et al. Copyright 2012, Sandia National Laboratories. Released February 1, 2012 ============================================ Changes from Version 2.4 (March 22, 2010) ============================================ Top Level - The "algorithms" directory has been eliminated. All routines are now at the root level, meaning that only one directory has to be added to the path to get all of Tensor Toolbox's standard functionality. - Added new CREATE_PROBLEM and CREATE_GUESS routines that can be used to generate test problems and initial guesses. These were first used at the AIM 2010 Tensor Decomposition workshop. Added TT_RANDORTHMAT, a helper function for creating problems. - Added new SSHOPM and SSHOPMC code for Shifted Symmetric Higher-Order Power Method for computing tensor eigenpairs. - Added new CP_APR method for Poisson Tensor Factorization via alternating Poisson regression, along with helper function tt_loglikelihood. - Added TENEYE to create "identity tensor". - Helper functions for CP_OPT and CP_WOPT (like cp_fg) now have "tt_" prepended to their names. They are not listed in the contents files. - Adding ability to import and export text versions of matrices and tensors via IMPORT_DATA/EXPORT_DATA functions. - Making calling sequence to TENZEROS, TENRAND, and TENONES consistent. Now all three will take either a size array or a list, i.e., tenones([5 4 3]) or tenones(5,4,3) produce the same results. Eliminated two-argument version of tenzeros, i.e., a call to tenzeros(M,N) should be changed to tenzeros(N*ones(1,M)). - Added additional comments in CP_ALS. - Made output of CP_WOPT consistent with CP_OPT, i.e., now includes output of optimization method. - Fixed bug for empty tensor in TENONES. - Fixed TT_IND2SUB, TT_SUB2IND to handle empty inputs. Documentation - Added documentation in the help browser for cp_opt, cp_wopt, cp_als, and sshopm. Class: tensor - Added SYMMETRIZE function to symmetrize a tensor and ISSYMMETRIC function to check if a tensor is symmetric. - Adding new TTSV function to compute a tensor times the same vector in every mode. Intended for symmetric tensors and doesn't allow user to specify exactly which modes are skipped. - Fixed "empty tensor" bugs in TENSOR (constructor), PERMUTE, COLLAPSE. - Fixed "1D tensor" bug in TENMAT. - Fixed bug with no results in FIND. - More error checking in MTTKRP. CLASS: sptensor - Added DIVIDE function for elementwise division. Class: ktensor - Added new SCORE function to compute "factor match score" for two ktensor's. Includes "greedy" option when - Added new REDISTRIBUTE function to redistribute the weights from lambda into a specified mode. - Fixed bug in NORM, which sometimes returned a negative value due to small errors in the calculation. Now it returns max(0,val). - Added ISEQUAL function that checks for elementwise equality on individual components. - Lots of new options for the NORMALIZE function. Class: ttensor - Added ISEQUAL function that checks for elementwise equality on individual components. ============================================ Changes from Version 2.3 (July 8, 2009) ============================================ General - tenzeros(m,n): Now has the ability to create an mth-order tensor of size n in every mode. tenzeros(siz) still works as usual. - tt_subcheck now uses isfinite rather than ~isnan and ~isinf based on error report from user. Algorithms - Added new cp_opt and cp_wopt functions (and related utility functions) for computing CP and weighted CP via optimization. Requires that the user also install the Poblano Toolbox for Matlab. This is freely available at http://software.sandia.gov/trac/poblano. - Changed the way that cp_als and tucker_als handle input arguments so that they can now be parameter-value pairs. Should be backwards compatible with old calling sequence. - cp_als: Reverted the way that Unew is calculated from Unew = Unew * pinv(Y) to Unew (Y \ Unew')'; which is from TTB2.2 and seems to give better performance. Class: sptensor - permute - Added check for empty tensor based on user error report. - spmatrix - Added check for empty tensor based on user error report. - sptensor - Replaced "~" with "junk" so it will work with Matlab 7.8 (older version). Allowed sptensor to take an sptensor3 object (though this class is not released yet) as input and convert it. Class: ktensor - Revamped "arrange" so that it can also just accept a permutation and rearrange the components. - Adding a new "extract" function to select and extract a subset of the components (rank-one factors) of a ktensor. - Adding a new function "ncomponents" to return the number of components. - Added a "normalize" function that normalizes the columns of the factor matrices to length 1 and absorbs the weights into lambda (without rearranging the factors). - Added new function "tocell" to convert a ktensor to a cell array. Class: sptenmat - In function "double", added check for empty tensor based on error report from user. ============================================ Changes from Version 2.2 (January 10, 2007) ============================================ General: - Added Memory Efficient Tucker (MET) package by Tamara Kolda and Jimeng Sun. Type 'help tucker_me' after installation for more information. - Fixed bug in tenzeros command so that it now returns an empty tensor when the initial size is emtpy. - Fixed bug in tt_assignment_type so that it works with a sparse tensor that is initially completely empty. - Added comments to tt_sub2ind and tt_ind2sub. - Removed errant ^M's at the end of every line of tt_subscheck. Algorithms: - Changed parafac_als to cp_als (old one can still be called but is deprecated). - Added an option to cp_als to only print the information every n iterations where n is a user-defined parameter. Also fixed bug in the case of R=1. - Added new cp_nmu function for computing a nonnegative tensor factorization based upon Lee & Seung's NMF multiplicative update. - Made calculation of residual in Tucker more efficient. Class: tensor - Adds reshape command. - Fixed find function so that it always returns a column vector. (Bug# 3969) - Fixed tenfun documentation. (Bug# 3339) Class: sptensor - Adds reshape and spmatrix commands. - Fixed bug in constructor so that it checks for subscripts out of range and other input problems. (Bug# 3925) - Fixed bug is subsasgn so that it works for a certain way of inserting complex values. (Bug #3868) - Fixed bug in disp function for sptensor that caused it not to accept the user input to display all nonzeros for large tensors. (Bug #4009) - Fixed bug in collapse so that it handles empty sptensor's correctly. - Fixed bug in rdivide so that it will work correctly when either argument is an empty tensor. - Fixed bug in squeeze so that it now works correctly for sptensor's with no nonzero elements. (Bug #3002) - Fixed bug in subsasgn for a sptensor so that it works even when the initial tensor is completely empty. - Fixed bug in ttt so that it works even when one of the sptensors has zero nonzeros. (Bug #3017) - Fixed bug in elemfun that didn't remove those nonzeros that had become zero (e.g., log 1 = 0). (Bug# 3235) Class: sptenmat - Fixed bug in sptenmat so that it works when it is passed an sptensor that doesn't have any entries. ============================================ Changes from Version 2.1 (December 1, 2006) ============================================ General: - Added INSTALL.txt with installation instructions. - Updated copyright date from 2006 to 2007 throughout. Classes: tensor and sptensor - Added transpose and ctranspose functions that throw an error (transpose is not supported for tensors, but previously would do nothing as if it *had* performed the transpose). - Added ldivide, rdivide, lmdivide, and rmdivide, though they all work only with scalars. Class: tensor - Added isequal. - Made find slightly more efficient in the case where the corresponding values are not also returned. - Fixed bug in assigning elements to 1-dimensional tensors. Class: sptensor - Cleaner display with disp or display functions. - Added checks against invalid sizes and subscripts for tensor construction and subscripted reference and assignment. - Fixed bug where the index 58 was confused with the character ':' in subscripted reference and assignment. - Made results of logical operators consistent with how sparse matrices work, i.e., produces a dense tensor iff the equivalent command on a sparse matrix would do the same. - Plus and minus now work with a scalar or dense tensor, and the result in those cases is dense. - Added ability to do .* with a scalar. - Made it so that isequal now works with dense tensors and will return true if the two tensors are equivalent. - Fixed bugs in double and squeeze on an all-zero sparse tensor. ============================================ Changes from Version 2.0 (September 6, 2006) ============================================ All - innerprod: Added checks that sizes match - Improved subscripted assignment for tensor and sptensor. Now supports assignment to a scalar (i.e., assign every element to that scalar) and growth in both the size and number of dimensions. Class: tensor - Added new function: nnz - tenfun (and most relational operations): Fixed major bug is dense-sparse comparisons. Class: sptensor - Added new functions: not, and, or, xor, eq, ne, le, lt, ge, gt, isequal - sptensor: Fixed bug where a 1D tensor was not correctly converted to a sparse tensor. Also, added ability to accept an MDA as an input and to accept a list of logical values as well as numerics. - subsref: Fixed bug on subscripted reference to an empty tensor. - ttt: Major overhaul that fixes a number of bugs and improves efficiency dramatically. - nvecs: Improved efficiency by converting to MATLAB sparse matrix and calling eigs on that rather than calling eigs with the aatx function. - disp/display: Fixed bug that caused tensors with a *single* element to display incorrectly. - full: Fixed bug that caused it to fail if called on a completely empty tensor. Class: ttensor - innerprod/norm/nvecs: Improved efficiency. - ttm: Removed errant debug print statements. Class: ktensor - datadisp.m: Minor changes to formatting. Other - License.txt: Removed an errant "7.3" that was in the text. - Fixed top-level contents file and added version information so that it will show up from MATLAB's ver command. ========================================= Changes from Version 1.0 (April 13, 2006) ========================================= Classes - Added support for sparse tensors (sptensor and sptenmat) - Renamed tensor_as_matrix to tenmat - Renamed tucker_tensor to ttensor - Renamed cp_tensor to ktensor - Many functions have substantially improved efficiency Changes to the tensor class - Removed functions: issamesize, order, shiftdim - Renamed functions: multiarrayop to tenfun - New functions: collapse, contract, find, full, innerprod, mttkrp, nvecs, scale Changes to the ktensor class (formerly cp_tensor) - Removed functions: issamesize, order - New functions: datadisp, double, end, fixsigns, innerprod, mttkrp, nvecs, times, ttm Changes to the ttensor class (formerly tucker_tensor) - Removed functions: issamesize, order - New functions: double, end, innerprod, mttkrp, norm, nvecs, ttm, ttv Changes to the tenmat class (formerly tensor_as_matrix) - New functions: end, minus, norm, plus, uminus, uplus Changes to examples, algorithms, and documentation - The examples directory no longer exists. - Instead, documentation has been incorporated directly into the MATLAB help navigator. - Also, a new algorithms directory has been added with two ALS methods for CANDECOMP/PARAFAC and Tucker. $Id: RELEASE_NOTES.txt,v 1.16 2010/03/22 16:08:13 tgkolda Exp $