Skip to main content
torch.js has not been released yet.
torch.js logotorch.js logotorch.js
PlaygroundContact
Login
Documentation
IntroductionType SafetyTensor ExpressionsTensor IndexingEinsumEinopsAutogradTraining a ModelProfiling & MemoryPyTorch MigrationBest PracticesRuntimesPerformancePyTorch CompatibilityBenchmarksDType Coverage
choleskycholesky_excholesky_inversecholesky_solveCholeskyExOptionsCholeskyInverseOptionsCholeskyOptionsCholeskySolveOptionscondCondOptionscrossCrossOptionsdetdiagonalDiagonalOptionseigeighEighOptionseigvalseigvalshhouseholder_productinvinv_exInvExOptionsldl_factorldl_factor_exldl_solveLdlFactorExOptionsLdlFactorOptionsLdlSolveOptionslobpcgLobpcgOptionslogdetlstsqLstsqOptionslulu_factorlu_factor_exlu_solvelu_unpackLuFactorExOptionsLuFactorOptionsLuOptionsLuSolveOptionsLuUnpackOptionsmatrix_expmatrix_normmatrix_powermatrix_rankMatrixNormOptionsMatrixRankOptionsmulti_dotnormNormOptionspca_lowrankPcaLowrankOptionspinvPinvOptionsqrQrOptionsslogdetsolvesolve_exsolve_triangularSolveExOptionsSolveOptionsSolveTriangularOptionssvdsvd_lowrankSvdLowrankOptionsSvdOptionssvdvalstensorinvTensorinvOptionstensorsolveTensorsolveOptionstracetriangular_solveTriangularSolveOptionsvanderVanderOptionsvecdotVecdotOptionsvector_normVectorNormOptions
absacosacoshAdaptivePool1dShapeAdaptivePool2dShapeaddaddbmmAddbmmOptionsaddcdivAddcdivOptionsaddcmulAddcmulOptionsaddmmAddmmOptionsaddmvAddmvOptionsaddrAddrOptionsadjointallallcloseAllcloseOptionsAlphaBetaOptionsamaxaminaminmaxAminmaxOptionsangleanyapplyOutarangeare_deterministic_algorithms_enabledargmaxargminargsortargwhereas_stridedas_tensorasinasinhAssertNoShapeErrorAssertNotErrorAsStridedOptionsAtat_error_index_out_of_boundsatanatan2atanhatleast_1datleast_2datleast_3dAtShapeautocast_decrement_nestingautocast_increment_nestingautograd_gradient_mismatch_errorautograd_not_registered_errorAutogradConfigAutogradDeviceAutogradDTypeAutogradEntryAutogradHandleAutogradHandleImplAxesRecordBackwardFnbaddbmmBaddbmmOptionsbartlett_windowBaseKernelConfigbatch_dimensions_do_not_match_errorbernoulliBernoulliOptionsBinaryBackwardFnBinaryBroadcastResultBinaryDTypeBinaryKernelConfigCPUBinaryKernelCPUBinaryOpConfigBinaryOpNamesBinaryOpSchemaBinaryOptionsbincountBincountOptionsbitwise_andbitwise_left_shiftbitwise_notbitwise_orbitwise_right_shiftbitwise_xorblackman_windowblock_diagbmmBooleanDTypeRulebroadcast_error_incompatible_dimensionsbroadcast_shapesbroadcast_tensorsbroadcast_toBroadcastShapeBroadcastShapeRulebroadcastShapesbucketizeBucketizeOptionsBufferUsagebuildEinopsErrorbuildErrorMessagecanBroadcastTocartesian_prodcatCatOptionsCatShapeCauchyOptionscdistCdistOptionsceilceluCeluFunctionalOptionschain_matmulCheckShapeErrorCholeskyShapechunkchunk_error_dim_out_of_rangeChunkOptionsclampClampOptionsclear_autocast_cacheclearEinopsCacheclearEinsumCacheclonecolumn_stackcombinationsCombinationsOptionscompiled_with_cxx11_abicomplexconjconj_physicalcontiguousConv1dShapeConv2dShapeConv3dShapeConvTranspose2dShapecopysigncorrcoefcoscoshcount_nonzeroCountNonzeroOptionscovcoverage_reportcoverageReportCoverageReportCovOptionsCPUForwardFnCPUKernelConfigCPUKernelEntryCPUOnlyResultCPUTensorDatacreateCumExtremeResultcreateTorchCreationOpSchemaCumExtremeResultcummaxcummincumprodCumShapecumsumcumulative_trapezoidCumulativeOptionsCumulativeOptionsWithDimdeg2raddetachDeterministicOptionsDetShapeDevicedevice_error_requiresDeviceBufferDeviceCapabilitiesDeviceCheckedResultDeviceConfigDeviceContextDeviceEntryDeviceHandleDeviceInputDeviceOptionsDeviceRegistryDeviceTypediagdiag_embedDiagEmbedOptionsdiagflatDiagflatOptionsDiagFlatOptionsdiagonal_scatterDiagonalOptionsDiagonalScatterOptionsDiagOptionsDiagShapediffDiffOptionsdigammadimension_error_out_of_rangeDispatchConfigdistDistOptionsdivdotDotShapeRuleDoubleDoubleDimdropoutDropoutFunctionalOptionsdsplitdstackDTypedtype_already_registered_errordtype_components_mismatch_errordtype_not_found_errorDTypeComponentsDTypeConfigDTypeCoverageReportDTypeDisplayConfigDTypeEntryDTypeHandleDTypeHandleImplDTypeInfoDTypeRegistryDTypeRuleDTypeSerializationConfigDynamicShapeEigShapeeinops_error_ambiguous_decompositioneinops_error_anonymous_in_outputeinops_error_dimension_mismatcheinops_error_invalid_patterneinops_error_reduce_undefined_outputeinops_error_repeat_missing_sizeeinops_error_undefined_axiseinsumeinsum_error_dimension_mismatcheinsum_error_index_out_of_rangeeinsum_error_invalid_equationeinsum_error_invalid_sublist_elementeinsum_error_operand_count_mismatcheinsum_error_subscript_rank_mismatcheinsum_error_unknown_output_indexEinsumOptionsEinsumOutputShapeEllipsiseluelu_EluFunctionalOptionsembedding_bag_error_requires_2d_inputemptyempty_cacheempty_likeeqequalerferfcerfinvexpexp2expandexpand_asexpand_error_incompatibleExpandShapeexpm1ExponentialOptionseyeEyeOptionsfftFFTOptionsfindKernelWithPredicatefindSimilarPatternsflattenFlattenOptionsFlattenShapeflipflip_error_dim_out_of_rangefliplrFlipShapeflipudfloat_powerFloatDTypeRulefloorfloor_dividefmaxfminfmodformatEquationErrorformatShapefracfrexpfrombufferfullfull_likefunction_already_registered_errorFunctionConfigFunctionEntryFunctionHandlegathergather_error_dim_out_of_rangeGatherShapegcdgegeluGeometricOptionsget_autocast_cpu_dtypeget_autocast_gpu_dtypeget_autocast_ipu_dtypeget_autocast_xla_dtypeget_default_deviceget_default_dtypeget_deterministic_debug_modeget_device_configget_device_contextget_device_moduleget_dtype_infoget_file_pathget_float32_matmul_precisionget_num_interop_threadsget_num_threadsget_op_infoget_printoptionsget_real_dtypeget_rng_stategetAutogradgetDTypegetEinopsCacheSizegetEinsumCacheSizegetFunctiongetKernelgetMethodgetOpInfoGetOpKindGetOpSchemagetScalarKernelgluGluFunctionalOptionsGradContextGradFnGradientsForgtHalfHalfDimhamming_windowhann_windowhardshrinkhardsigmoidhardswishhardtanhhardtanh_HardtanhFunctionalOptionshas_autogradhas_devicehas_dtypehas_kernelhasAutogradhasDTypehasFunctionhasKernelhasMethodhasScalarKernelHasShapeErrorheavisidehistcHistcOptionshistogramHistogramOptionsHistogramResulthsplithstackhypoti0IdentityShapeifftimagindex_addindex_copyindex_fillindex_putindex_reduceindex_selectindex_select_error_dim_out_of_rangeIndexPutOptionsIndexSelectShapeIndexSpecIndicesOptionsIndicesSpecinitialize_deviceInputsForInsertDiminvalid_config_errorinverseInverseShapeirfftis_anomaly_check_nan_enabledis_anomaly_enabledis_autocast_cache_enabledis_autocast_cpu_enabledis_autocast_ipu_enabledis_autocast_xla_enabledis_complexis_complex_dtypeis_cpu_only_modeis_deterministic_algorithms_warn_only_enabledis_floating_pointis_floating_point_dtypeis_inference_mode_enabledis_nonzerois_tensoris_warn_always_enabledis_webgpu_availableIs2DIsAtLeast1DIsBinaryOpIsBinaryOpNameiscloseIscloseOptionsisfiniteisinisinfisnanisneginfisposinfisrealIsReductionOpIsReductionOpNameIsRegistryErrorIsShapeErroristftISTFTOptionsIsUnaryOpIsUnaryOpNameitem_error_not_scalarItemResultkaiser_windowKaiserWindowOptionskernel_not_registered_errorkernel_signature_mismatch_errorKernelConfigKernelConfigWebGPUKernelEntryKernelHandleKernelInfoKernelPredicateKernelRegistryKernelWebGPUkronkthvalueKthvalueOptionslcmldexpleleaky_reluleaky_relu_LeakyReluFunctionalOptionslerplevenshteinDistancelgammalinalg_error_not_square_matrixlinalg_error_requires_2dlinalg_error_requires_at_least_2dlinearlinspacelist_custom_deviceslist_custom_dtypeslist_deviceslist_dtypeslist_functionslist_kernelslist_methodslist_opslistCustomDTypeslistDTypeslistFunctionslistKernelsListKernelsOptionslistMethodslistOpsListOpsOptionsloglog_softmaxlog10log1plog2logaddexplogaddexp2logcumsumexplogical_andlogical_notlogical_orlogical_xorLogitOptionsLogNormalOptionsLogOptionslogsigmoidlogspacelogsumexpLogsumexpOptionsltLUShapeLuSolveOptionsmasked_fillmasked_selectmasked_select_asyncMaskSpecmatmulmatmul_error_inner_dimensions_do_not_matchMatmul2DShapeMatmulShapeMatmulShapeRuleMatrixTransposeShapemaxmaximummeanmedianmemory_statsmemory_summarymeshgridmethod_already_registered_errormethod_dtype_not_supported_errorMethodConfigMethodEntryMethodHandleminminimummishmmMMShapeRulemodemovedimmsortmulmultinomialmultinomial_asyncMultinomialAsyncOptionsMultinomialOptionsMultiplyBymvMVShapeRulenan_to_numnanmeannanmediannanquantileNanReductionOptionsnansumNanToNumOptionsnarrownarrow_copynarrow_error_length_exceeds_boundsnarrow_error_start_out_of_boundsNarrowShapeneneedsBroadcastnegNegativeDimnextafternonzeroNonzeroOptionsnormnormalNormalOptionsNormOptionsnumelonesones_likeop_kind_mismatch_errorop_not_found_errorOpCoverageEntryOpInfoOpKindOpNameOpSchemaOpSchemasouterOuterShapepackPackShapepermutepermute_error_dimension_count_mismatchPermuteShapepoissonpolarPool1dShapePool2dShapePool3dShapepositivepowpreluPrintOptionsprodprofiler_allow_cudagraph_cupti_lazy_reinit_cuda12promote_typesPromoteDTypeRulePutOptionsquantileQuantileOptionsrad2degrandrand_likerandintrandint_likeRandintLikeOptionsRandintOptionsrandnrandn_likeRandomLikeOptionsRandomOptionsrandpermRangeSpecRankravelrealrearrangeRearrangeOptionsRearrangeShapereciprocalreduceReduceOperationReduceOptionsReduceShapeReductionKernelConfigCPUReductionKernelCPUReductionOpNamesReductionOpSchemaReductionOptionsReductionShapeRuleregister_backwardregister_deviceregister_dtyperegister_forwardregister_functionregister_methodregister_scalar_forwardregisterAutogradRegisterBackwardOptionsregisterBinaryOpregisterDTypeRegisterDTypeOptionsRegisteredDTyperegisterFunctionRegisterFunctionOptionsregisterKernelRegisterKernelOptionsregisterMethodRegisterMethodOptionsregisterScalarKernelregisterUnaryOpregistration_failed_errorrelurelu_relu6ReluFunctionalOptionsremainderRemoveDimrepeatrepeat_interleaveRepeatInterleaveOptionsRepeatOptionsRepeatShapeReplaceDimrequireWebGPUreset_peak_memory_statsreshapeReshapeShaperesult_typerfftrollRollOptionsrot90Rot90Optionsroundrrelurrelu_RreluFunctionalOptionsrsqrtSafeExpandShapeSameDTypeRuleSameShapeRuleSaveForBackwardScalarCPUForwardFnScalarCPUKernelConfigScalarKernelEntryScalarKernelHandleScalarWebGPUKernelConfigScaleDimscatterscatter_addscatter_add_scatter_error_dim_out_of_rangescatter_reducescatter_reduce_ScatterReduceOptionsScatterShapesearchsortedSearchSortedOptionsselectselect_error_index_out_of_boundsselect_scatterSelectShapeseluset_default_deviceset_default_tensor_typeset_deterministic_debug_modeset_float32_matmul_precisionset_printoptionsset_warn_alwaysSetupContextFnShapeShapeCheckedResultShapedTensorShapeErrorMessageShapeOpSchemaShapeRulesigmoidsignsignbitsilusinsincsinhSizeOptionsslice_error_out_of_boundsslice_scatterSliceOptionsSliceScatterOptionsSliceShapeSliceSpecsoftmaxsoftmax_error_dim_out_of_rangeSoftmaxShapesoftminSoftminFunctionalOptionssoftplusSoftplusFunctionalOptionssoftshrinksoftsignsortSortOptionssplitsplit_error_dim_out_of_rangeSplitOptionssqrtsquaresqueezeSqueezeOptionsSqueezeShapestackStackOptionsStackShapestdstd_meanStdVarMeanOptionsStdVarOptionsstftSTFTOptionsStrideOptionssubSublistSublistElementSubscriptIndexsumSVDShapeswapaxessym_floatsym_intsym_notttaketake_along_dimTakeAlongDimOptionstantanhtanhshrinktensortensor_splitTensorCreatorTensorDatatensordotTensordotOptionsTensorLikeTensorMetaTensorOptionsTensorStoragethresholdthreshold_tileTileShapeToOptionstopkTopkOptionsTorchtraceTraceShapetransposetranspose_dims_error_out_of_rangetranspose_error_requires_2d_tensorTransposeDimsShapeTransposeDimsShapeCheckedTransposeShapetrapezoidTrapezoidOptionsTriangularOptionstriltril_indicesTriOptionsTripletriutriu_indicestrue_dividetruncTupleOfLengthTypedArrayTypedArrayForTypedStorageTypeOptionsUnaryBackwardFnUnaryDTypeUnaryKernelConfigCPUUnaryKernelCPUUnaryOpConfigUnaryOpFnUnaryOpNamesUnaryOpParamsUnaryOpSchemaUnaryOptionsunbindunbind_error_dim_out_of_rangeUnbindOptionsunflattenUniformOptionsuniqueunique_consecutiveUniqueConsecutiveOptionsUniqueOptionsunpackUnpackShapeunravel_indexunregister_deviceunsqueezeUnsqueezeOptionsUnsqueezeShapeuse_deterministic_algorithmsValidateBatchedSquareMatrixValidateChunkDimValidatedEinsumShapevalidateDeviceValidateDeviceValidatedRearrangeShapeValidatedReduceShapeValidatedRepeatShapevalidateDTypeValidateEinsumValidateOperandCountValidateRanksValidateScalarValidateSplitDimValidateSquareMatrixValidateUnbindDimValueOptionsvar_var_meanvdotviewview_as_complexview_as_realvmapvsplitvstackWebGPUKernelConfigWebGPUOnlyResultWebGPUTensorDatawhereWindowOptionsxlogyzeroszeros_like
torch.js· 2026
LegalTerms of UsePrivacy Policy
/
/
  1. docs
  2. torch.js
  3. torch
  4. linalg
  5. eigvalsh

torch.linalg.eigvalsh

function eigvalsh<S extends Shape, D extends DType, Dev extends DeviceType>(A: Tensor<S, D, Dev>): Tensor<DynamicShape, D, Dev>function eigvalsh<S extends Shape, D extends DType, Dev extends DeviceType>(A: Tensor<S, D, Dev>, options: EighOptions): Tensor<DynamicShape, D, Dev>

Computes only the eigenvalues of a symmetric/Hermitian matrix (without eigenvectors).

More efficient than eigh() when only eigenvalues are needed. Essential for:

  • Positive/negative definite testing (all λ > 0 means positive-definite)
  • Condition number computation κ(A) = λ_max / λ_min
  • Spectral radius and stability analysis
  • Convexity analysis via Hessian eigenvalues
  • Principal component importance (variances) from covariance matrices
  • Numerical rank detection

Assumes input is symmetric (A = A^T); only uses upper or lower triangle. Always returns real eigenvalues (even for complex symmetric matrices, though this is unusual). Numerically stable and efficient via Jacobi method.

Symmetric/Hermitian input required:

  • For symmetric real matrices: A = A^T
  • For Hermitian complex matrices: A = A^H (conjugate transpose)
  • Input matrix should be exactly symmetric within numerical precision

Comparison to alternatives:

  • eigh(): Returns both eigenvalues and eigenvectors; slightly more expensive
  • eigvals(): For general (non-symmetric) matrices; less stable
  • svd(): Singular values (different from eigenvalues; more general but slower)
Eigenvalues λ satisfy: A@v=λ@v for eigenvectors vAll eigenvalues are real: lambdaiinmathbbRtextforsymmetricADiagonalization: A=Vtextdiag(lambda)VTtextwhereVTV=I\begin{aligned} \text{Eigenvalues } \lambda \text{ satisfy: } A @ v = \lambda @ v \text{ for eigenvectors } v \\ \text{All eigenvalues are real: } \\lambda_i \\in \\mathbb{R} \\text{ for symmetric } A \\ \text{Diagonalization: } A = V \\text{ diag}(\\lambda) V^T \\text{ where } V^T V = I \end{aligned}Eigenvalues λ satisfy: A@v=λ@v for eigenvectors vAll eigenvalues are real: lambdai​inmathbbRtextforsymmetricADiagonalization: A=Vtextdiag(lambda)VTtextwhereVTV=I​
  • Symmetric input required: Input must satisfy A = A^T (within tolerance)
  • Always real eigenvalues: Unlike eigvals for general matrices
  • Usually ordered: Typically ascending (smallest to largest)
  • UPLO parameter: Specify which triangle to use; other is ignored
  • More efficient than eigh(): Saves computation by skipping eigenvectors
  • Square matrix required: Input must be n × n
  • GPU accelerated: Uses Jacobi method for efficient GPU computation
  • Robust method: Jacobi method is numerically very stable
  • Symmetry required: Results undefined if matrix is not symmetric
  • Numerical precision: Small asymmetries due to rounding may affect results slightly
  • Ties in eigenvalues: If eigenvalues are very close, ill-conditioning may occur

Parameters

ATensor<S, D, Dev>
Symmetric/Hermitian matrix (n × n) or batch (..., n, n)

Returns

Tensor<DynamicShape, D, Dev>– Eigenvalue vector, shape [n] or [..., n], always real and usually sorted ascending

Examples

// Compute eigenvalues only (faster than eigh)
const A = torch.tensor([[4.0, 1.0], [1.0, 3.0]]);  // Symmetric
const eigenvalues = torch.linalg.eigvalsh(A);
// eigenvalues ≈ [2, 5] (usually sorted ascending)

// Test for positive definiteness
const A = torch.randn(5, 5);
const A_sym = A.add(A.T).mul(0.5);  // Symmetrize
const eigenvalues = torch.linalg.eigvalsh(A_sym);
const is_pd = eigenvalues.min().gt(0);  // All λ > 0?
const is_psd = eigenvalues.min().ge(0);  // All λ ≥ 0?
console.log(is_pd ? 'Positive definite' : 'Not positive definite');

// Compute condition number
const A = torch.tensor([[10.0, 1.0], [1.0, 1.0]]);  // Ill-conditioned
const eigenvalues = torch.linalg.eigvalsh(A);
const cond = eigenvalues.max().div(eigenvalues.min());
console.log('Condition number:', cond.item());

// Principal component analysis (covariance eigenvalues = variances)
const X = torch.randn(1000, 10);  // 1000 samples, 10 features
const mean = X.mean(0);
const X_centered = X.sub(mean);
const Cov = X_centered.T.matmul(X_centered).div(1000);
const variances = torch.linalg.eigvalsh(Cov);  // Eigenvalues = variances
const variance_explained = variances.div(variances.sum());
console.log('Explained variance:', variance_explained);

// Stability of covariance matrix (should be positive semi-definite)
const empirical_cov = torch.randn(50, 10).T.matmul(torch.randn(50, 10));
const eigs = torch.linalg.eigvalsh(empirical_cov.add(empirical_cov.T).mul(0.5));
const is_numerical_psd = eigs.min().ge(-1e-10);  // Allow small numerical errors

// Batched eigenvalues
const A_batch = torch.randn(32, 10, 10);
const A_batch_sym = A_batch.add(A_batch.transpose(-2, -1)).mul(0.5);
const eigenvalues = torch.linalg.eigvalsh(A_batch_sym);
// eigenvalues shape: [32, 10]

// Using upper triangle only
const U_matrix = torch.randn(5, 5).triu();
const eigs = torch.linalg.eigvalsh(U_matrix, { UPLO: 'U' });
// Uses only upper triangle; ignores lower

See Also

  • PyTorch torch.linalg.eigvalsh()
  • eigh - Symmetric eigendecomposition with eigenvectors
  • eigvals - Eigenvalues of general (non-symmetric) matrices
  • svd - Singular values (different concept, for any rectangular matrix)
  • cond - Condition number (uses eigenvalues for symmetric matrices)
  • matrix_rank - Matrix rank via eigenvalue count
Previous
eigvals
Next
householder_product