Storing sparse matrices in cell or struct without converting them to full

3 views (last 30 days)
I noticed recently, to my surprise, that sparse matrices are silently converted to full when put into a cell or a stuct. This is especially problematic when using the hand functionality of varargin and varargout that tend to collect variables as cell-arrays. Is there a way to disable or bypass this behavior?
  2 Comments
Jan Neggers
Jan Neggers on 29 Sep 2022
Thank you @Chunru,
I think I got lost somewhere, or my analysis was very sloppy and thus my conclusion wrong. Sparse matrices are NOT converted to full when storing in cells or structs. Something else in my code is doing so. Since this is a large project, I need to dive back in and do some bug hunting, this time I'll make sure to have a coffee before I start.
If the problem is related, I'll come back here, but in case of silence assume that it was not a related issue.
I think what tripped me up was the output of display():
>> s.a = speye(3)
s =
struct with fields:
a: [3×3 double]
>> a{1} = speye(3)
a =
1×1 cell array
{3×3 double}
Which does not include the "sparse" attribute. But, I should have looked inside at the matrix itself.
Chunru
Chunru on 30 Sep 2022
When the structure and cell are displayed as a whole, it shows the size and type of the data.
When the elements are shown, it shows the sparse storage.
s.a = speye(3)
s = struct with fields:
a: [3×3 double]
s.a
ans =
(1,1) 1 (2,2) 1 (3,3) 1
a{1} = speye(3)
a = 1×1 cell array
{3×3 double}
c = a{1}
c =
(1,1) 1 (2,2) 1 (3,3) 1

Sign in to comment.

Accepted Answer

Chunru
Chunru on 28 Sep 2022
The sparse array in cell is still sparse array as shown below, Can you show the problem you have encountered?
a = sparse(eye(1000)); % create a sparse array
b{1} = a; b{2}=a; % put it into cell array
c = b{1} % retrieve from the cell array
c =
(1,1) 1 (2,2) 1 (3,3) 1 (4,4) 1 (5,5) 1 (6,6) 1 (7,7) 1 (8,8) 1 (9,9) 1 (10,10) 1 (11,11) 1 (12,12) 1 (13,13) 1 (14,14) 1 (15,15) 1 (16,16) 1 (17,17) 1 (18,18) 1 (19,19) 1 (20,20) 1 (21,21) 1 (22,22) 1 (23,23) 1 (24,24) 1 (25,25) 1 (26,26) 1 (27,27) 1 (28,28) 1 (29,29) 1 (30,30) 1 (31,31) 1 (32,32) 1 (33,33) 1 (34,34) 1 (35,35) 1 (36,36) 1 (37,37) 1 (38,38) 1 (39,39) 1 (40,40) 1 (41,41) 1 (42,42) 1 (43,43) 1 (44,44) 1 (45,45) 1 (46,46) 1 (47,47) 1 (48,48) 1 (49,49) 1 (50,50) 1 (51,51) 1 (52,52) 1 (53,53) 1 (54,54) 1 (55,55) 1 (56,56) 1 (57,57) 1 (58,58) 1 (59,59) 1 (60,60) 1 (61,61) 1 (62,62) 1 (63,63) 1 (64,64) 1 (65,65) 1 (66,66) 1 (67,67) 1 (68,68) 1 (69,69) 1 (70,70) 1 (71,71) 1 (72,72) 1 (73,73) 1 (74,74) 1 (75,75) 1 (76,76) 1 (77,77) 1 (78,78) 1 (79,79) 1 (80,80) 1 (81,81) 1 (82,82) 1 (83,83) 1 (84,84) 1 (85,85) 1 (86,86) 1 (87,87) 1 (88,88) 1 (89,89) 1 (90,90) 1 (91,91) 1 (92,92) 1 (93,93) 1 (94,94) 1 (95,95) 1 (96,96) 1 (97,97) 1 (98,98) 1 (99,99) 1 (100,100) 1 (101,101) 1 (102,102) 1 (103,103) 1 (104,104) 1 (105,105) 1 (106,106) 1 (107,107) 1 (108,108) 1 (109,109) 1 (110,110) 1 (111,111) 1 (112,112) 1 (113,113) 1 (114,114) 1 (115,115) 1 (116,116) 1 (117,117) 1 (118,118) 1 (119,119) 1 (120,120) 1 (121,121) 1 (122,122) 1 (123,123) 1 (124,124) 1 (125,125) 1 (126,126) 1 (127,127) 1 (128,128) 1 (129,129) 1 (130,130) 1 (131,131) 1 (132,132) 1 (133,133) 1 (134,134) 1 (135,135) 1 (136,136) 1 (137,137) 1 (138,138) 1 (139,139) 1 (140,140) 1 (141,141) 1 (142,142) 1 (143,143) 1 (144,144) 1 (145,145) 1 (146,146) 1 (147,147) 1 (148,148) 1 (149,149) 1 (150,150) 1 (151,151) 1 (152,152) 1 (153,153) 1 (154,154) 1 (155,155) 1 (156,156) 1 (157,157) 1 (158,158) 1 (159,159) 1 (160,160) 1 (161,161) 1 (162,162) 1 (163,163) 1 (164,164) 1 (165,165) 1 (166,166) 1 (167,167) 1 (168,168) 1 (169,169) 1 (170,170) 1 (171,171) 1 (172,172) 1 (173,173) 1 (174,174) 1 (175,175) 1 (176,176) 1 (177,177) 1 (178,178) 1 (179,179) 1 (180,180) 1 (181,181) 1 (182,182) 1 (183,183) 1 (184,184) 1 (185,185) 1 (186,186) 1 (187,187) 1 (188,188) 1 (189,189) 1 (190,190) 1 (191,191) 1 (192,192) 1 (193,193) 1 (194,194) 1 (195,195) 1 (196,196) 1 (197,197) 1 (198,198) 1 (199,199) 1 (200,200) 1 (201,201) 1 (202,202) 1 (203,203) 1 (204,204) 1 (205,205) 1 (206,206) 1 (207,207) 1 (208,208) 1 (209,209) 1 (210,210) 1 (211,211) 1 (212,212) 1 (213,213) 1 (214,214) 1 (215,215) 1 (216,216) 1 (217,217) 1 (218,218) 1 (219,219) 1 (220,220) 1 (221,221) 1 (222,222) 1 (223,223) 1 (224,224) 1 (225,225) 1 (226,226) 1 (227,227) 1 (228,228) 1 (229,229) 1 (230,230) 1 (231,231) 1 (232,232) 1 (233,233) 1 (234,234) 1 (235,235) 1 (236,236) 1 (237,237) 1 (238,238) 1 (239,239) 1 (240,240) 1 (241,241) 1 (242,242) 1 (243,243) 1 (244,244) 1 (245,245) 1 (246,246) 1 (247,247) 1 (248,248) 1 (249,249) 1 (250,250) 1 (251,251) 1 (252,252) 1 (253,253) 1 (254,254) 1 (255,255) 1 (256,256) 1 (257,257) 1 (258,258) 1 (259,259) 1 (260,260) 1 (261,261) 1 (262,262) 1 (263,263) 1 (264,264) 1 (265,265) 1 (266,266) 1 (267,267) 1 (268,268) 1 (269,269) 1 (270,270) 1 (271,271) 1 (272,272) 1 (273,273) 1 (274,274) 1 (275,275) 1 (276,276) 1 (277,277) 1 (278,278) 1 (279,279) 1 (280,280) 1 (281,281) 1 (282,282) 1 (283,283) 1 (284,284) 1 (285,285) 1 (286,286) 1 (287,287) 1 (288,288) 1 (289,289) 1 (290,290) 1 (291,291) 1 (292,292) 1 (293,293) 1 (294,294) 1 (295,295) 1 (296,296) 1 (297,297) 1 (298,298) 1 (299,299) 1 (300,300) 1 (301,301) 1 (302,302) 1 (303,303) 1 (304,304) 1 (305,305) 1 (306,306) 1 (307,307) 1 (308,308) 1 (309,309) 1 (310,310) 1 (311,311) 1 (312,312) 1 (313,313) 1 (314,314) 1 (315,315) 1 (316,316) 1 (317,317) 1 (318,318) 1 (319,319) 1 (320,320) 1 (321,321) 1 (322,322) 1 (323,323) 1 (324,324) 1 (325,325) 1 (326,326) 1 (327,327) 1 (328,328) 1 (329,329) 1 (330,330) 1 (331,331) 1 (332,332) 1 (333,333) 1 (334,334) 1 (335,335) 1 (336,336) 1 (337,337) 1 (338,338) 1 (339,339) 1 (340,340) 1 (341,341) 1 (342,342) 1 (343,343) 1 (344,344) 1 (345,345) 1 (346,346) 1 (347,347) 1 (348,348) 1 (349,349) 1 (350,350) 1 (351,351) 1 (352,352) 1 (353,353) 1 (354,354) 1 (355,355) 1 (356,356) 1 (357,357) 1 (358,358) 1 (359,359) 1 (360,360) 1 (361,361) 1 (362,362) 1 (363,363) 1 (364,364) 1 (365,365) 1 (366,366) 1 (367,367) 1 (368,368) 1 (369,369) 1 (370,370) 1 (371,371) 1 (372,372) 1 (373,373) 1 (374,374) 1 (375,375) 1 (376,376) 1 (377,377) 1 (378,378) 1 (379,379) 1 (380,380) 1 (381,381) 1 (382,382) 1 (383,383) 1 (384,384) 1 (385,385) 1 (386,386) 1 (387,387) 1 (388,388) 1 (389,389) 1 (390,390) 1 (391,391) 1 (392,392) 1 (393,393) 1 (394,394) 1 (395,395) 1 (396,396) 1 (397,397) 1 (398,398) 1 (399,399) 1 (400,400) 1 (401,401) 1 (402,402) 1 (403,403) 1 (404,404) 1 (405,405) 1 (406,406) 1 (407,407) 1 (408,408) 1 (409,409) 1 (410,410) 1 (411,411) 1 (412,412) 1 (413,413) 1 (414,414) 1 (415,415) 1 (416,416) 1 (417,417) 1 (418,418) 1 (419,419) 1 (420,420) 1 (421,421) 1 (422,422) 1 (423,423) 1 (424,424) 1 (425,425) 1 (426,426) 1 (427,427) 1 (428,428) 1 (429,429) 1 (430,430) 1 (431,431) 1 (432,432) 1 (433,433) 1 (434,434) 1 (435,435) 1 (436,436) 1 (437,437) 1 (438,438) 1 (439,439) 1 (440,440) 1 (441,441) 1 (442,442) 1 (443,443) 1 (444,444) 1 (445,445) 1 (446,446) 1 (447,447) 1 (448,448) 1 (449,449) 1 (450,450) 1 (451,451) 1 (452,452) 1 (453,453) 1 (454,454) 1 (455,455) 1 (456,456) 1 (457,457) 1 (458,458) 1 (459,459) 1 (460,460) 1 (461,461) 1 (462,462) 1 (463,463) 1 (464,464) 1 (465,465) 1 (466,466) 1 (467,467) 1 (468,468) 1 (469,469) 1 (470,470) 1 (471,471) 1 (472,472) 1 (473,473) 1 (474,474) 1 (475,475) 1 (476,476) 1 (477,477) 1 (478,478) 1 (479,479) 1 (480,480) 1 (481,481) 1 (482,482) 1 (483,483) 1 (484,484) 1 (485,485) 1 (486,486) 1 (487,487) 1 (488,488) 1 (489,489) 1 (490,490) 1 (491,491) 1 (492,492) 1 (493,493) 1 (494,494) 1 (495,495) 1 (496,496) 1 (497,497) 1 (498,498) 1 (499,499) 1 (500,500) 1 (501,501) 1 (502,502) 1 (503,503) 1 (504,504) 1 (505,505) 1 (506,506) 1 (507,507) 1 (508,508) 1 (509,509) 1 (510,510) 1 (511,511) 1 (512,512) 1 (513,513) 1 (514,514) 1 (515,515) 1 (516,516) 1 (517,517) 1 (518,518) 1 (519,519) 1 (520,520) 1 (521,521) 1 (522,522) 1 (523,523) 1 (524,524) 1 (525,525) 1 (526,526) 1 (527,527) 1 (528,528) 1 (529,529) 1 (530,530) 1 (531,531) 1 (532,532) 1 (533,533) 1 (534,534) 1 (535,535) 1 (536,536) 1 (537,537) 1 (538,538) 1 (539,539) 1 (540,540) 1 (541,541) 1 (542,542) 1 (543,543) 1 (544,544) 1 (545,545) 1 (546,546) 1 (547,547) 1 (548,548) 1 (549,549) 1 (550,550) 1 (551,551) 1 (552,552) 1 (553,553) 1 (554,554) 1 (555,555) 1 (556,556) 1 (557,557) 1 (558,558) 1 (559,559) 1 (560,560) 1 (561,561) 1 (562,562) 1 (563,563) 1 (564,564) 1 (565,565) 1 (566,566) 1 (567,567) 1 (568,568) 1 (569,569) 1 (570,570) 1 (571,571) 1 (572,572) 1 (573,573) 1 (574,574) 1 (575,575) 1 (576,576) 1 (577,577) 1 (578,578) 1 (579,579) 1 (580,580) 1 (581,581) 1 (582,582) 1 (583,583) 1 (584,584) 1 (585,585) 1 (586,586) 1 (587,587) 1 (588,588) 1 (589,589) 1 (590,590) 1 (591,591) 1 (592,592) 1 (593,593) 1 (594,594) 1 (595,595) 1 (596,596) 1 (597,597) 1 (598,598) 1 (599,599) 1 (600,600) 1 (601,601) 1 (602,602) 1 (603,603) 1 (604,604) 1 (605,605) 1 (606,606) 1 (607,607) 1 (608,608) 1 (609,609) 1 (610,610) 1 (611,611) 1 (612,612) 1 (613,613) 1 (614,614) 1 (615,615) 1 (616,616) 1 (617,617) 1 (618,618) 1 (619,619) 1 (620,620) 1 (621,621) 1 (622,622) 1 (623,623) 1 (624,624) 1 (625,625) 1 (626,626) 1 (627,627) 1 (628,628) 1 (629,629) 1 (630,630) 1 (631,631) 1 (632,632) 1 (633,633) 1 (634,634) 1 (635,635) 1 (636,636) 1 (637,637) 1 (638,638) 1 (639,639) 1 (640,640) 1 (641,641) 1 (642,642) 1 (643,643) 1 (644,644) 1 (645,645) 1 (646,646) 1 (647,647) 1 (648,648) 1 (649,649) 1 (650,650) 1 (651,651) 1 (652,652) 1 (653,653) 1 (654,654) 1 (655,655) 1 (656,656) 1 (657,657) 1 (658,658) 1 (659,659) 1 (660,660) 1 (661,661) 1 (662,662) 1 (663,663) 1 (664,664) 1 (665,665) 1 (666,666) 1 (667,667) 1 (668,668) 1 (669,669) 1 (670,670) 1 (671,671) 1 (672,672) 1 (673,673) 1 (674,674) 1 (675,675) 1 (676,676) 1 (677,677) 1 (678,678) 1 (679,679) 1 (680,680) 1 (681,681) 1 (682,682) 1 (683,683) 1 (684,684) 1 (685,685) 1 (686,686) 1 (687,687) 1 (688,688) 1 (689,689) 1 (690,690) 1 (691,691) 1 (692,692) 1 (693,693) 1 (694,694) 1 (695,695) 1 (696,696) 1 (697,697) 1 (698,698) 1 (699,699) 1 (700,700) 1 (701,701) 1 (702,702) 1 (703,703) 1 (704,704) 1 (705,705) 1 (706,706) 1 (707,707) 1 (708,708) 1 (709,709) 1 (710,710) 1 (711,711) 1 (712,712) 1 (713,713) 1 (714,714) 1 (715,715) 1 (716,716) 1 (717,717) 1 (718,718) 1 (719,719) 1 (720,720) 1 (721,721) 1 (722,722) 1 (723,723) 1 (724,724) 1 (725,725) 1 (726,726) 1 (727,727) 1 (728,728) 1 (729,729) 1 (730,730) 1 (731,731) 1 (732,732) 1 (733,733) 1 (734,734) 1 (735,735) 1 (736,736) 1 (737,737) 1 (738,738) 1 (739,739) 1 (740,740) 1 (741,741) 1 (742,742) 1 (743,743) 1 (744,744) 1 (745,745) 1 (746,746) 1 (747,747) 1 (748,748) 1 (749,749) 1 (750,750) 1 (751,751) 1 (752,752) 1 (753,753) 1 (754,754) 1 (755,755) 1 (756,756) 1 (757,757) 1 (758,758) 1 (759,759) 1 (760,760) 1 (761,761) 1 (762,762) 1 (763,763) 1 (764,764) 1 (765,765) 1 (766,766) 1 (767,767) 1 (768,768) 1 (769,769) 1 (770,770) 1 (771,771) 1 (772,772) 1 (773,773) 1 (774,774) 1 (775,775) 1 (776,776) 1 (777,777) 1 (778,778) 1 (779,779) 1 (780,780) 1 (781,781) 1 (782,782) 1 (783,783) 1 (784,784) 1 (785,785) 1 (786,786) 1 (787,787) 1 (788,788) 1 (789,789) 1 (790,790) 1 (791,791) 1 (792,792) 1 (793,793) 1 (794,794) 1 (795,795) 1 (796,796) 1 (797,797) 1 (798,798) 1 (799,799) 1 (800,800) 1 (801,801) 1 (802,802) 1 (803,803) 1 (804,804) 1 (805,805) 1 (806,806) 1 (807,807) 1 (808,808) 1 (809,809) 1 (810,810) 1 (811,811) 1 (812,812) 1 (813,813) 1 (814,814) 1 (815,815) 1 (816,816) 1 (817,817) 1 (818,818) 1 (819,819) 1 (820,820) 1 (821,821) 1 (822,822) 1 (823,823) 1 (824,824) 1 (825,825) 1 (826,826) 1 (827,827) 1 (828,828) 1 (829,829) 1 (830,830) 1 (831,831) 1 (832,832) 1 (833,833) 1 (834,834) 1 (835,835) 1 (836,836) 1 (837,837) 1 (838,838) 1 (839,839) 1 (840,840) 1 (841,841) 1 (842,842) 1 (843,843) 1 (844,844) 1 (845,845) 1 (846,846) 1 (847,847) 1 (848,848) 1 (849,849) 1 (850,850) 1 (851,851) 1 (852,852) 1 (853,853) 1 (854,854) 1 (855,855) 1 (856,856) 1 (857,857) 1 (858,858) 1 (859,859) 1 (860,860) 1 (861,861) 1 (862,862) 1 (863,863) 1 (864,864) 1 (865,865) 1 (866,866) 1 (867,867) 1 (868,868) 1 (869,869) 1 (870,870) 1 (871,871) 1 (872,872) 1 (873,873) 1 (874,874) 1 (875,875) 1 (876,876) 1 (877,877) 1 (878,878) 1 (879,879) 1 (880,880) 1 (881,881) 1 (882,882) 1 (883,883) 1 (884,884) 1 (885,885) 1 (886,886) 1 (887,887) 1 (888,888) 1 (889,889) 1 (890,890) 1 (891,891) 1 (892,892) 1 (893,893) 1 (894,894) 1 (895,895) 1 (896,896) 1 (897,897) 1 (898,898) 1 (899,899) 1 (900,900) 1 (901,901) 1 (902,902) 1 (903,903) 1 (904,904) 1 (905,905) 1 (906,906) 1 (907,907) 1 (908,908) 1 (909,909) 1 (910,910) 1 (911,911) 1 (912,912) 1 (913,913) 1 (914,914) 1 (915,915) 1 (916,916) 1 (917,917) 1 (918,918) 1 (919,919) 1 (920,920) 1 (921,921) 1 (922,922) 1 (923,923) 1 (924,924) 1 (925,925) 1 (926,926) 1 (927,927) 1 (928,928) 1 (929,929) 1 (930,930) 1 (931,931) 1 (932,932) 1 (933,933) 1 (934,934) 1 (935,935) 1 (936,936) 1 (937,937) 1 (938,938) 1 (939,939) 1 (940,940) 1 (941,941) 1 (942,942) 1 (943,943) 1 (944,944) 1 (945,945) 1 (946,946) 1 (947,947) 1 (948,948) 1 (949,949) 1 (950,950) 1 (951,951) 1 (952,952) 1 (953,953) 1 (954,954) 1 (955,955) 1 (956,956) 1 (957,957) 1 (958,958) 1 (959,959) 1 (960,960) 1 (961,961) 1 (962,962) 1 (963,963) 1 (964,964) 1 (965,965) 1 (966,966) 1 (967,967) 1 (968,968) 1 (969,969) 1 (970,970) 1 (971,971) 1 (972,972) 1 (973,973) 1 (974,974) 1 (975,975) 1 (976,976) 1 (977,977) 1 (978,978) 1 (979,979) 1 (980,980) 1 (981,981) 1 (982,982) 1 (983,983) 1 (984,984) 1 (985,985) 1 (986,986) 1 (987,987) 1 (988,988) 1 (989,989) 1 (990,990) 1 (991,991) 1 (992,992) 1 (993,993) 1 (994,994) 1 (995,995) 1 (996,996) 1 (997,997) 1 (998,998) 1 (999,999) 1 (1000,1000) 1
whos
Name Size Bytes Class Attributes a 1000x1000 24008 double sparse b 1x2 48224 cell c 1000x1000 24008 double sparse cmdout 1x33 66 char

More Answers (0)

Categories

Find more on Structures in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!