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

3 visualizaciones (últimos 30 días)
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 comentarios
Jan Neggers
Jan Neggers el 29 de Sept. de 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 el 30 de Sept. de 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

Iniciar sesión para comentar.

Respuesta aceptada

Chunru
Chunru el 28 de Sept. de 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

Más respuestas (0)

Categorías

Más información sobre Structures en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by