delete zeros from a SparseArray
Why doesn't SparseArray
automatically remove zero entries? The code
a = SparseArray[{2->22,3->33,5->55,7->77,11->1111,13->1313},13];
b = SparseArray[{1->11,3->33,5->55,7->77,9->99,11->1111},13];
r = DeleteCases[a-b,0]
r //ArrayRules
returns {{1}->-11,{3}->0,{5}->0,{7}->0,{9}->-99,{11}->0,{2}->22,{13}->1313,{_}->0}
instead of {{1}->-11,{9}->-99,{2}->22,{13}->1313,{_}->0}
.
Is there a nice way to get rid of zero entries? For instance, if on $A!in!mathbb{Z}^{mtimes n}_2$ I perform Gaussian elimination, I use A=Mod[A,2];
, suddenly many entries are zero and I don't want to waste memory on them.
Of course I could use A=SparseArray[DeleteCases[ArrayRules[A],#[[2]]==0&],{m,n}]
, but it seems clumsy to use this often...
Also, if I have a very long sparse row that gets updated frequently and fills up somewhat (Gaussian elimination), is it better to use SparseArray
with +
or Association
with Merge
?
matrix associations sparse-arrays rule
add a comment |
Why doesn't SparseArray
automatically remove zero entries? The code
a = SparseArray[{2->22,3->33,5->55,7->77,11->1111,13->1313},13];
b = SparseArray[{1->11,3->33,5->55,7->77,9->99,11->1111},13];
r = DeleteCases[a-b,0]
r //ArrayRules
returns {{1}->-11,{3}->0,{5}->0,{7}->0,{9}->-99,{11}->0,{2}->22,{13}->1313,{_}->0}
instead of {{1}->-11,{9}->-99,{2}->22,{13}->1313,{_}->0}
.
Is there a nice way to get rid of zero entries? For instance, if on $A!in!mathbb{Z}^{mtimes n}_2$ I perform Gaussian elimination, I use A=Mod[A,2];
, suddenly many entries are zero and I don't want to waste memory on them.
Of course I could use A=SparseArray[DeleteCases[ArrayRules[A],#[[2]]==0&],{m,n}]
, but it seems clumsy to use this often...
Also, if I have a very long sparse row that gets updated frequently and fills up somewhat (Gaussian elimination), is it better to use SparseArray
with +
or Association
with Merge
?
matrix associations sparse-arrays rule
1
Possible duplicate of How to prevent a SparseArray entry from being specified when it coincides with the default value?
– MeMyselfI
3 hours ago
It does not do it automatically because rebuilding a sparse array is expensive. It is left to you to decide when you want to rebuild it and eliminate unnecessary entries. Just applySparseArray
again.
– Szabolcs
1 hour ago
add a comment |
Why doesn't SparseArray
automatically remove zero entries? The code
a = SparseArray[{2->22,3->33,5->55,7->77,11->1111,13->1313},13];
b = SparseArray[{1->11,3->33,5->55,7->77,9->99,11->1111},13];
r = DeleteCases[a-b,0]
r //ArrayRules
returns {{1}->-11,{3}->0,{5}->0,{7}->0,{9}->-99,{11}->0,{2}->22,{13}->1313,{_}->0}
instead of {{1}->-11,{9}->-99,{2}->22,{13}->1313,{_}->0}
.
Is there a nice way to get rid of zero entries? For instance, if on $A!in!mathbb{Z}^{mtimes n}_2$ I perform Gaussian elimination, I use A=Mod[A,2];
, suddenly many entries are zero and I don't want to waste memory on them.
Of course I could use A=SparseArray[DeleteCases[ArrayRules[A],#[[2]]==0&],{m,n}]
, but it seems clumsy to use this often...
Also, if I have a very long sparse row that gets updated frequently and fills up somewhat (Gaussian elimination), is it better to use SparseArray
with +
or Association
with Merge
?
matrix associations sparse-arrays rule
Why doesn't SparseArray
automatically remove zero entries? The code
a = SparseArray[{2->22,3->33,5->55,7->77,11->1111,13->1313},13];
b = SparseArray[{1->11,3->33,5->55,7->77,9->99,11->1111},13];
r = DeleteCases[a-b,0]
r //ArrayRules
returns {{1}->-11,{3}->0,{5}->0,{7}->0,{9}->-99,{11}->0,{2}->22,{13}->1313,{_}->0}
instead of {{1}->-11,{9}->-99,{2}->22,{13}->1313,{_}->0}
.
Is there a nice way to get rid of zero entries? For instance, if on $A!in!mathbb{Z}^{mtimes n}_2$ I perform Gaussian elimination, I use A=Mod[A,2];
, suddenly many entries are zero and I don't want to waste memory on them.
Of course I could use A=SparseArray[DeleteCases[ArrayRules[A],#[[2]]==0&],{m,n}]
, but it seems clumsy to use this often...
Also, if I have a very long sparse row that gets updated frequently and fills up somewhat (Gaussian elimination), is it better to use SparseArray
with +
or Association
with Merge
?
matrix associations sparse-arrays rule
matrix associations sparse-arrays rule
asked 7 hours ago
Leon
347111
347111
1
Possible duplicate of How to prevent a SparseArray entry from being specified when it coincides with the default value?
– MeMyselfI
3 hours ago
It does not do it automatically because rebuilding a sparse array is expensive. It is left to you to decide when you want to rebuild it and eliminate unnecessary entries. Just applySparseArray
again.
– Szabolcs
1 hour ago
add a comment |
1
Possible duplicate of How to prevent a SparseArray entry from being specified when it coincides with the default value?
– MeMyselfI
3 hours ago
It does not do it automatically because rebuilding a sparse array is expensive. It is left to you to decide when you want to rebuild it and eliminate unnecessary entries. Just applySparseArray
again.
– Szabolcs
1 hour ago
1
1
Possible duplicate of How to prevent a SparseArray entry from being specified when it coincides with the default value?
– MeMyselfI
3 hours ago
Possible duplicate of How to prevent a SparseArray entry from being specified when it coincides with the default value?
– MeMyselfI
3 hours ago
It does not do it automatically because rebuilding a sparse array is expensive. It is left to you to decide when you want to rebuild it and eliminate unnecessary entries. Just apply
SparseArray
again.– Szabolcs
1 hour ago
It does not do it automatically because rebuilding a sparse array is expensive. It is left to you to decide when you want to rebuild it and eliminate unnecessary entries. Just apply
SparseArray
again.– Szabolcs
1 hour ago
add a comment |
1 Answer
1
active
oldest
votes
You can just apply SparseArray
to a SparseArray
object to normalize it. For your example:
a = SparseArray[{2->22,3->33,5->55,7->77,11->1111,13->1313},13];
b = SparseArray[{1->11,3->33,5->55,7->77,9->99,11->1111},13];
r = DeleteCases[a-b,0];
SparseArray[r] //ArrayRules
{{1} -> -11, {2} -> 22, {9} -> -99, {13} -> 1313, {_} -> 0}
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
});
});
}, "mathjax-editing");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "387"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f188581%2fdelete-zeros-from-a-sparsearray%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can just apply SparseArray
to a SparseArray
object to normalize it. For your example:
a = SparseArray[{2->22,3->33,5->55,7->77,11->1111,13->1313},13];
b = SparseArray[{1->11,3->33,5->55,7->77,9->99,11->1111},13];
r = DeleteCases[a-b,0];
SparseArray[r] //ArrayRules
{{1} -> -11, {2} -> 22, {9} -> -99, {13} -> 1313, {_} -> 0}
add a comment |
You can just apply SparseArray
to a SparseArray
object to normalize it. For your example:
a = SparseArray[{2->22,3->33,5->55,7->77,11->1111,13->1313},13];
b = SparseArray[{1->11,3->33,5->55,7->77,9->99,11->1111},13];
r = DeleteCases[a-b,0];
SparseArray[r] //ArrayRules
{{1} -> -11, {2} -> 22, {9} -> -99, {13} -> 1313, {_} -> 0}
add a comment |
You can just apply SparseArray
to a SparseArray
object to normalize it. For your example:
a = SparseArray[{2->22,3->33,5->55,7->77,11->1111,13->1313},13];
b = SparseArray[{1->11,3->33,5->55,7->77,9->99,11->1111},13];
r = DeleteCases[a-b,0];
SparseArray[r] //ArrayRules
{{1} -> -11, {2} -> 22, {9} -> -99, {13} -> 1313, {_} -> 0}
You can just apply SparseArray
to a SparseArray
object to normalize it. For your example:
a = SparseArray[{2->22,3->33,5->55,7->77,11->1111,13->1313},13];
b = SparseArray[{1->11,3->33,5->55,7->77,9->99,11->1111},13];
r = DeleteCases[a-b,0];
SparseArray[r] //ArrayRules
{{1} -> -11, {2} -> 22, {9} -> -99, {13} -> 1313, {_} -> 0}
answered 7 hours ago
Carl Woll
67k387175
67k387175
add a comment |
add a comment |
Thanks for contributing an answer to Mathematica Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f188581%2fdelete-zeros-from-a-sparsearray%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Possible duplicate of How to prevent a SparseArray entry from being specified when it coincides with the default value?
– MeMyselfI
3 hours ago
It does not do it automatically because rebuilding a sparse array is expensive. It is left to you to decide when you want to rebuild it and eliminate unnecessary entries. Just apply
SparseArray
again.– Szabolcs
1 hour ago