RSpectra icon indicating copy to clipboard operation
RSpectra copied to clipboard

Possible bug: singular values out of order?

Open alexpghayes opened this issue 2 months ago • 0 comments

Hey there, not sure what's going on here, but I have an example where the computed singular values are not monotonically decreasing.

library(RSpectra)
library(Matrix)

A <- new("dsCMatrix", i = c(0L, 0L, 1L, 0L, 1L, 2L, 0L, 1L, 2L, 3L,
0L, 1L, 2L, 3L, 0L, 1L, 2L, 4L, 0L, 1L, 2L, 3L, 4L, 6L, 0L, 1L,
2L, 4L, 5L, 7L, 0L, 1L, 2L, 3L, 7L, 8L, 1L, 2L, 3L, 4L, 6L, 8L,
0L, 8L, 10L, 0L, 8L, 10L, 11L, 4L, 8L, 10L, 11L, 12L, 0L, 1L,
10L, 11L, 12L, 13L, 0L, 1L, 6L, 7L, 10L, 11L, 12L, 13L, 14L,
2L, 10L, 11L, 12L, 13L, 14L, 6L, 10L, 11L, 12L, 13L, 15L, 16L,
1L, 5L, 7L, 11L, 12L, 13L, 17L, 10L, 11L, 12L, 13L, 14L, 15L,
16L, 2L, 10L, 11L, 13L, 14L, 15L, 16L, 17L, 0L, 3L, 4L, 5L, 7L,
10L, 11L, 15L, 18L, 19L, 20L, 0L, 1L, 10L, 12L, 17L, 20L, 21L,
1L, 20L, 21L, 22L, 18L, 20L, 21L, 22L, 12L, 15L, 20L, 21L, 24L,
1L, 4L, 5L, 19L, 20L, 21L, 22L, 23L, 24L, 5L, 6L, 20L, 21L, 22L,
23L, 26L, 0L, 9L, 11L, 20L, 21L, 22L, 23L, 24L, 25L, 0L, 2L,
16L, 20L, 21L, 22L, 24L, 26L, 4L, 20L, 21L, 22L, 26L, 27L, 29L,
11L, 15L, 17L, 21L, 25L, 30L, 0L, 1L, 19L, 30L, 31L, 12L, 30L,
31L, 32L, 14L, 20L, 30L, 31L, 32L, 0L, 1L, 8L, 10L, 14L, 25L,
30L, 31L, 32L, 33L, 13L, 30L, 31L, 32L, 33L, 34L, 14L, 19L, 32L,
36L, 24L, 30L, 31L, 32L, 34L, 35L, 36L, 4L, 20L, 25L, 30L, 32L,
34L, 35L, 36L, 0L, 1L, 6L, 10L, 15L, 30L, 31L, 32L, 33L, 34L,
0L, 3L, 18L, 21L, 22L, 40L, 3L, 14L, 19L, 20L, 40L, 41L, 14L,
15L, 19L, 40L, 41L, 0L, 4L, 18L, 40L, 41L, 42L, 27L, 30L, 36L,
38L, 40L, 41L, 42L, 43L, 2L, 24L, 34L, 41L, 43L, 44L, 43L, 44L,
45L, 46L, 7L, 27L, 30L, 34L, 40L, 41L, 42L, 43L, 44L, 10L, 11L,
12L, 40L, 41L, 43L, 44L, 45L, 46L, 2L, 10L, 12L, 22L, 23L, 32L,
33L, 40L, 41L, 42L, 43L, 44L, 47L, 10L, 12L, 17L, 19L, 20L, 28L,
29L, 30L, 43L, 44L, 50L, 0L, 4L, 11L, 13L, 14L, 20L, 31L, 50L,
51L, 0L, 2L, 12L, 13L, 14L, 20L, 23L, 38L, 41L, 48L, 50L, 51L,
52L, 43L, 50L, 51L, 52L, 53L, 3L, 50L, 52L, 53L, 22L, 24L, 26L,
35L, 40L, 50L, 51L, 52L, 54L, 15L, 33L, 42L, 45L, 50L, 51L, 53L,
54L, 55L, 1L, 14L, 20L, 45L, 50L, 51L, 52L, 53L, 55L, 4L, 36L,
50L, 52L, 53L, 55L, 2L, 10L, 18L, 31L, 50L, 55L, 7L, 11L, 12L,
15L, 16L, 20L, 22L, 29L, 30L, 31L, 33L, 38L, 40L, 42L, 49L, 51L,
52L, 53L, 55L, 60L, 0L, 2L, 4L, 47L, 50L, 56L, 60L, 61L, 0L,
7L, 8L, 30L, 60L, 61L, 62L, 0L, 7L, 10L, 12L, 14L, 42L, 51L,
57L, 60L, 61L, 62L, 63L, 0L, 20L, 46L, 52L, 60L, 61L, 64L, 0L,
1L, 10L, 15L, 40L, 47L, 48L, 55L, 60L, 61L, 63L, 64L, 65L, 10L,
13L, 17L, 20L, 30L, 44L, 60L, 61L, 63L, 65L, 4L, 12L, 40L, 60L,
61L, 65L, 66L, 4L, 13L, 22L, 23L, 44L, 46L, 60L, 61L, 62L, 64L,
66L, 15L, 27L, 49L, 60L, 61L, 63L, 64L, 65L, 66L, 69L, 0L, 1L,
3L, 5L, 11L, 14L, 17L, 33L, 36L, 38L, 41L, 42L, 43L, 50L, 52L,
60L, 70L, 0L, 3L, 8L, 11L, 12L, 14L, 23L, 54L, 70L, 71L, 0L,
10L, 32L, 35L, 43L, 52L, 70L, 71L, 72L, 3L, 6L, 13L, 31L, 44L,
70L, 71L, 72L, 1L, 4L, 11L, 55L, 58L, 60L, 62L, 70L, 71L, 72L,
73L, 74L, 4L, 8L, 9L, 11L, 29L, 50L, 52L, 60L, 61L, 65L, 70L,
72L, 73L, 74L, 75L, 11L, 38L, 43L, 46L, 62L, 70L, 71L, 73L, 74L,
75L, 76L, 0L, 1L, 2L, 21L, 29L, 30L, 44L, 50L, 51L, 57L, 70L,
71L, 72L, 73L, 74L, 75L, 76L, 77L, 2L, 22L, 34L, 50L, 70L, 71L,
72L, 73L, 74L, 75L, 76L, 2L, 52L, 57L, 68L, 70L, 71L, 72L, 73L,
74L, 0L, 1L, 2L, 3L, 10L, 11L, 16L, 20L, 28L, 33L, 43L, 51L,
60L, 62L, 68L, 70L, 74L, 80L, 1L, 20L, 21L, 24L, 28L, 32L, 50L,
51L, 54L, 60L, 61L, 62L, 67L, 73L, 79L, 80L, 81L, 5L, 27L, 41L,
47L, 54L, 56L, 72L, 74L, 80L, 81L, 82L, 0L, 20L, 40L, 49L, 59L,
60L, 61L, 65L, 76L, 79L, 80L, 81L, 82L, 83L, 0L, 6L, 10L, 11L,
13L, 24L, 74L, 80L, 81L, 10L, 22L, 27L, 80L, 81L, 82L, 83L, 84L,
0L, 40L, 60L, 80L, 81L, 82L, 84L, 86L, 1L, 11L, 22L, 32L, 37L,
64L, 70L, 71L, 80L, 81L, 82L, 84L, 87L, 1L, 11L, 28L, 31L, 44L,
59L, 62L, 80L, 81L, 82L, 83L, 86L, 19L, 50L, 53L, 80L, 81L, 84L,
88L, 0L, 1L, 4L, 11L, 15L, 20L, 21L, 22L, 40L, 47L, 50L, 51L,
54L, 60L, 63L, 65L, 69L, 70L, 76L, 78L, 81L, 83L, 90L, 3L, 11L,
12L, 20L, 22L, 40L, 46L, 51L, 70L, 77L, 80L, 82L, 90L, 91L, 4L,
6L, 7L, 22L, 25L, 38L, 48L, 72L, 90L, 91L, 92L, 0L, 11L, 14L,
20L, 23L, 34L, 45L, 47L, 65L, 70L, 71L, 80L, 81L, 90L, 91L, 92L,
93L, 6L, 10L, 12L, 20L, 22L, 24L, 42L, 43L, 44L, 50L, 53L, 54L,
60L, 74L, 90L, 91L, 92L, 93L, 94L, 9L, 10L, 21L, 23L, 26L, 54L,
60L, 72L, 90L, 91L, 92L, 93L, 94L, 95L, 3L, 5L, 11L, 13L, 22L,
30L, 44L, 72L, 80L, 90L, 91L, 92L, 93L, 94L, 96L, 1L, 25L, 40L,
44L, 62L, 70L, 81L, 86L, 90L, 91L, 93L, 95L, 96L, 97L, 0L, 10L,
11L, 12L, 26L, 30L, 42L, 46L, 55L, 90L, 91L, 92L, 93L, 94L, 95L,
12L, 60L, 90L, 91L, 92L, 93L, 94L, 95L, 96L, 97L, 99L), p = c(0L,
1L, 3L, 6L, 10L, 14L, 18L, 24L, 30L, 36L, 42L, 45L, 49L, 54L,
60L, 69L, 75L, 82L, 89L, 96L, 104L, 115L, 122L, 126L, 130L, 135L,
144L, 151L, 160L, 168L, 175L, 181L, 186L, 190L, 195L, 205L, 211L,
215L, 222L, 230L, 240L, 246L, 252L, 257L, 263L, 271L, 277L, 281L,
290L, 299L, 312L, 323L, 332L, 345L, 350L, 354L, 363L, 372L, 381L,
387L, 393L, 413L, 421L, 428L, 440L, 447L, 460L, 470L, 477L, 488L,
498L, 515L, 525L, 534L, 542L, 554L, 569L, 580L, 598L, 609L, 618L,
636L, 653L, 664L, 678L, 687L, 695L, 703L, 716L, 728L, 735L, 758L,
772L, 783L, 800L, 819L, 833L, 848L, 862L, 877L, 888L), Dim = c(100L,
100L), Dimnames = list(NULL, NULL), x = c(10, 20, 3, 5, 5, 1,
10, 6, 8, 3, 10, 6, 5, 5, 6, 4, 1, 3, 5, 5, 2, 1, 2, 1, 6, 3,
1, 1, 1, 3, 4, 3, 2, 1, 2, 2, 4, 1, 3, 1, 1, 2, 1, 1, 16, 1,
1, 11, 2, 1, 1, 6, 12, 1, 2, 1, 11, 5, 5, 2, 1, 1, 1, 1, 5, 2,
6, 4, 2, 1, 3, 2, 6, 3, 1, 2, 2, 4, 4, 2, 6, 3, 1, 1, 1, 2, 2,
3, 1, 3, 2, 4, 3, 1, 4, 2, 1, 4, 8, 1, 2, 1, 1, 2, 2, 1, 1, 1,
1, 1, 2, 1, 1, 1, 10, 1, 1, 1, 1, 1, 21, 2, 1, 14, 7, 4, 1, 10,
3, 4, 1, 1, 5, 1, 1, 2, 1, 1, 1, 5, 6, 1, 2, 2, 1, 1, 8, 3, 1,
1, 1, 1, 1, 1, 5, 3, 1, 2, 1, 1, 1, 1, 1, 6, 3, 2, 1, 1, 1, 1,
3, 3, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 1, 3, 4, 1, 1,
1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 3, 1, 1, 1, 1, 1,
1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 4, 2, 1, 2, 1, 1, 1,
1, 1, 1, 1, 3, 2, 1, 1, 1, 1, 2, 2, 2, 1, 2, 1, 1, 3, 3, 1, 2,
1, 5, 3, 3, 2, 1, 5, 3, 1, 1, 1, 1, 1, 3, 2, 1, 5, 1, 1, 1, 1,
1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 4, 2, 3, 1, 2, 1, 1, 2, 1, 3, 2,
2, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 1,
1, 1, 2, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 2,
2, 1, 1, 1, 6, 3, 2, 1, 3, 2, 5, 1, 1, 4, 3, 1, 1, 1, 1, 1, 1,
3, 2, 2, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 3, 1, 1, 4,
2, 1, 1, 3, 2, 3, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 1, 1, 1, 1, 5, 1, 1,
1, 1, 1, 5, 6, 1, 1, 1, 2, 1, 1, 1, 1, 1, 9, 3, 3, 2, 1, 1, 1,
1, 5, 4, 2, 1, 1, 1, 1, 1, 1, 2, 1, 8, 3, 2, 1, 1, 1, 1, 1, 2,
1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1,
2, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1,
1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 11, 4, 1,
1, 1, 1, 1, 1, 7, 2, 2, 1, 1, 1, 1, 1, 5, 3, 2, 1, 1, 1, 1, 1,
1, 1, 5, 4, 4, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 3, 4, 2,
1, 1, 1, 1, 1, 1, 3, 2, 3, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 2, 2, 3, 2, 3, 1, 1, 1, 1, 1, 1, 3, 1, 2, 2, 1, 2, 1, 1,
1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 4, 1, 3, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 8,
2, 1, 1, 1, 1, 1, 1, 2, 1, 4, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 3, 6, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 4, 1, 2,
1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 3, 2, 2,
1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 4, 2, 1, 1, 1,
1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1,
2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
1, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 4, 3, 2, 1, 1,
1, 1, 1, 1, 1, 1, 1, 8, 6, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 3, 2, 3, 1, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 3, 2, 4, 1, 2, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 2, 2, 1, 1, 3, 1, 2, 3,
2, 1, 1, 1, 1), uplo = "U", factors = list())


s <- RSpectra::svds(A, 10)
s$d
#>  [1] 50.55172 41.59248 39.33245 27.91308 24.89109 20.85036 19.89105 18.69605
#>  [9] 17.51910 20.14677

Created on 2025-11-07 with reprex v2.1.0

I can reproduce this with both the CRAN and dev versions of RSpectra

alexpghayes avatar Nov 08 '25 03:11 alexpghayes