Storing sparse matrices in cell or struct without converting them to full
You are now following this question
- You will see updates in your followed content feed.
- You may receive emails, depending on your communication preferences.
An Error Occurred
Unable to complete the action because of changes made to the page. Reload the page to see its updated state.
Show older comments
0 votes
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
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
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
Accepted Answer
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 Resizing and Reshaping Matrices in Help Center and File Exchange
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)