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. svdvals

torch.linalg.svdvals

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

Computes only the singular values of a matrix (without U or Vh).

More efficient than full SVD when only singular values are needed. Essential for:

  • Computing matrix rank (count non-negligible singular values)
  • Assessing numerical rank and effective dimensionality
  • Computing matrix norms (Frobenius, spectral)
  • Condition number estimation κ(A) = σ_max / σ_min
  • Low-rank approximation truncation decisions
  • Image compression and data dimensionality analysis
  • Ill-conditioning assessment

Singular values σ are non-negative, ordered in descending order, and encode the "strength" of each principal direction of the matrix. Small singular values indicate near-rank-deficiency.

Relationship to svd():

  • svd(): Returns U, S, Vh (O(n³) time, but gives full decomposition)
  • svdvals(): Returns only S (still O(n³) asymptotically, but smaller constants)
  • svdvals_half() (if available): Returns only half the singular values (faster for large matrices)

Singular values vs eigenvalues:

  • Singular values σ(A): Always exist, always non-negative, for any A (even rectangular)
  • Eigenvalues λ(A): Exist only for square A, can be complex
  • Relationship: σᵢ(A) = √λᵢ(A^T A)
Singular values σi satisfy: A=Utextdiag(σ)VTAlways non-negative and ordered: sigma1geqsigma2geqcdotsgeqsigmakgeq0Related to eigenvalues: sigmai=sqrtlambdai(ATA)\begin{aligned} \text{Singular values } \sigma_i \text{ satisfy: } A = U \\text{ diag}(\sigma) V^T \\ \text{Always non-negative and ordered: } \\sigma_1 \\geq \\sigma_2 \\geq \\cdots \\geq \\sigma_k \\geq 0 \\ \text{Related to eigenvalues: } \\sigma_i = \\sqrt{\\lambda_i(A^T A)} \end{aligned}Singular values σi​ satisfy: A=Utextdiag(σ)VTAlways non-negative and ordered: sigma1​geqsigma2​geqcdotsgeqsigmak​geq0Related to eigenvalues: sigmai​=sqrtlambdai​(ATA)​
  • Always non-negative: σ ≥ 0 for all singular values
  • Descending order: Sorted from largest to smallest
  • Rectangular matrices OK: Works for any m × n, not just square
  • More efficient than svd(): Avoids computing U and Vh
  • GPU accelerated: Uses Jacobi method for efficient GPU computation
  • Batching supported: Works with batched input matrices
  • Rank invariant: Number of non-zero singular values = matrix rank
  • Numerical rank is approximate: Distinguish mathematically zero from numerically negligible
  • Threshold choice matters: Different tolerances give different rank estimates
  • Ill-conditioned matrices: Small singular values can be unreliable

Parameters

ATensor<S, D, Dev>
Input matrix (m × n) or batch (..., m, n)

Returns

Tensor<DynamicShape, D, Dev>– Singular value vector, shape [k] or [..., k] where k = min(m, n) Always in descending order (largest first)

Examples

// Compute singular values only (faster than full SVD)
const A = torch.tensor([[1.0, 0.0], [0.0, 2.0]]);
const S = torch.linalg.svdvals(A);
// S ≈ [2, 1] (in descending order)

// Compute matrix rank (count non-negligible singular values)
const A = torch.randn(100, 50);  // Likely full rank 50
const S = torch.linalg.svdvals(A);
const tol = 1e-10 * S[0];  // Threshold relative to largest singular value
const rank = S.gt(tol).sum();  // Count singular values > tolerance

// Assess effective dimensionality (intrinsic data dimension)
const X = torch.randn(1000, 100);  // 1000 samples, 100 features
const S = torch.linalg.svdvals(X.T);  // Singular values of feature matrix
// S encodes how many "effective directions" exist in data
// If many singular values are near zero, data has lower intrinsic dimension

// Condition number (numerical stability indicator)
const A = torch.randn(10, 10);
const S = torch.linalg.svdvals(A);
const cond = S[0].div(S[-1]);  // κ(A) = σ_max / σ_min
console.log('Condition number:', cond.item());

// Low-rank approximation (keep only top k singular values)
const A = torch.randn(1000, 500);
const S = torch.linalg.svdvals(A);
const k = 50;  // Keep top 50 singular values
const info_retained = S.narrow(0, 0, k).sum().div(S.sum());  // Fraction of info
console.log('Info retained with rank-50 approximation:', info_retained.item() * 100, '%');

// Image compression via singular values
const image = torch.randn(256, 256);  // Grayscale image
const S = torch.linalg.svdvals(image);
// Singular values decay rapidly; can use few values for good compression
const cumsum = S.cumsum(0);
const target_energy = 0.99;
const k = cumsum.lt(target_energy * cumsum[-1]).sum() + 1;
console.log(`Can compress to rank-${k.item()} for 99% energy`);

// Batched singular values
const A_batch = torch.randn(32, 50, 30);  // 32 matrices, 50×30 each
const S_batch = torch.linalg.svdvals(A_batch);
// S_batch shape: [32, 30] (30 = min(50, 30))

See Also

  • PyTorch torch.linalg.svdvals()
  • svd - Full singular value decomposition with U and Vh
  • matrix_rank - Matrix rank (uses SVD to count singular values)
  • cond - Condition number (uses singular values)
  • matrix_norm - Matrix norms (computed from singular values)
  • pinv - Pseudoinverse (uses SVD with singular value thresholding)
Previous
SvdOptions
Next
tensorinv