필터 지우기
필터 지우기

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

조회 수: 5 (최근 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