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

2 次查看(过去 30 天)
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 个评论
Jan Neggers
Jan Neggers 2022-9-29
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 2022-9-30
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

请先登录,再进行评论。

采纳的回答

Chunru
Chunru 2022-9-28
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

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Structures 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by