How to generate binary array whose elements with values 1 are randomly drawnMatrix and random, weighted assignment of rowsDevising a sparse array ruleAdding two SparseArrays produces zeros in the reported “NonzeroValues”Random Matrix with criteriaHow to find position of non-zero elements in SparseArray without converting to a dense objectGenerating a random network adjacency matrix via an arbitrary average degreeProblems with RandomChoiceGenerating invertible matrix with lines within a given setMatrix expansion and reorganisationmatrix with chosen elements distributed in a random position
How can I, as DM, avoid the Conga Line of Death occurring when implementing some form of flanking rule?
In One Punch Man, is King actually weak?
ContourPlot — How do I color by contour curvature?
Quoting Keynes in a lecture
What happens if I try to grapple an illusory duplicate from the Mirror Image spell?
Has the laser at Magurele, Romania reached a tenth of the Sun's power?
How to leave product feedback on macOS?
Why would five hundred and five be same as one?
How many people need to be born every 8 years to sustain population?
Is there a distance limit for minecart tracks?
If Captain Marvel (MCU) were to have a child with a human male, would the child be human or Kree?
Language involving irrational number is not a CFL
Check if object is null and return null
Make a Bowl of Alphabet Soup
When and why was runway 07/25 at Kai Tak removed?
Giving feedback to someone without sounding prejudiced
How do you justify more code being written by following clean code practices?
Why does a 97 / 92 key piano exist by Bösendorfer?
Is there anyway, I can have two passwords for my wi-fi
How to test the sharpness of a knife?
Alignment of six matrices
How do I prevent inappropriate ads from appearing in my game?
Is there a reason to prefer HFS+ over APFS for disk images in High Sierra and/or Mojave?
Can I say "fingers" when referring to toes?
How to generate binary array whose elements with values 1 are randomly drawn
Matrix and random, weighted assignment of rowsDevising a sparse array ruleAdding two SparseArrays produces zeros in the reported “NonzeroValues”Random Matrix with criteriaHow to find position of non-zero elements in SparseArray without converting to a dense objectGenerating a random network adjacency matrix via an arbitrary average degreeProblems with RandomChoiceGenerating invertible matrix with lines within a given setMatrix expansion and reorganisationmatrix with chosen elements distributed in a random position
$begingroup$
I am trying to generate a binary matrix (whose elements are 0 or 1) of dimension 20x20. To do this, I want to supply as input the number of matrix elements that will take value 1. After, I want to draw randomly distinct position of those elements (values 1). I thought of doing this:
n = 20; (*matrix dimension*)
d = 300; (*number of matrix elements that will assume value 1*)
rules = RandomInteger[1, n, d, 2]; (*defines the position of the matrix elements*)
rules2 = Table[rules[[i]] -> 1, i, Length[rules]]; (*applies the list of random positions the value 1*)
s = SparseArray[rules2] (*creates the binary random matrix*)
However, this method is not efficient because it does not create 300 different random positions (some are repeated). For example, the result appears 212 filled matrix elements (many of the positions contains summed values).
SparseArray[<212>,20,20]
I would like to know if anyone could help me solve this problem of generating 300 numbers 1 in random positions in a 20x20 dimension matrix.
Thanks in advance
matrix random sparse-arrays
$endgroup$
add a comment |
$begingroup$
I am trying to generate a binary matrix (whose elements are 0 or 1) of dimension 20x20. To do this, I want to supply as input the number of matrix elements that will take value 1. After, I want to draw randomly distinct position of those elements (values 1). I thought of doing this:
n = 20; (*matrix dimension*)
d = 300; (*number of matrix elements that will assume value 1*)
rules = RandomInteger[1, n, d, 2]; (*defines the position of the matrix elements*)
rules2 = Table[rules[[i]] -> 1, i, Length[rules]]; (*applies the list of random positions the value 1*)
s = SparseArray[rules2] (*creates the binary random matrix*)
However, this method is not efficient because it does not create 300 different random positions (some are repeated). For example, the result appears 212 filled matrix elements (many of the positions contains summed values).
SparseArray[<212>,20,20]
I would like to know if anyone could help me solve this problem of generating 300 numbers 1 in random positions in a 20x20 dimension matrix.
Thanks in advance
matrix random sparse-arrays
$endgroup$
add a comment |
$begingroup$
I am trying to generate a binary matrix (whose elements are 0 or 1) of dimension 20x20. To do this, I want to supply as input the number of matrix elements that will take value 1. After, I want to draw randomly distinct position of those elements (values 1). I thought of doing this:
n = 20; (*matrix dimension*)
d = 300; (*number of matrix elements that will assume value 1*)
rules = RandomInteger[1, n, d, 2]; (*defines the position of the matrix elements*)
rules2 = Table[rules[[i]] -> 1, i, Length[rules]]; (*applies the list of random positions the value 1*)
s = SparseArray[rules2] (*creates the binary random matrix*)
However, this method is not efficient because it does not create 300 different random positions (some are repeated). For example, the result appears 212 filled matrix elements (many of the positions contains summed values).
SparseArray[<212>,20,20]
I would like to know if anyone could help me solve this problem of generating 300 numbers 1 in random positions in a 20x20 dimension matrix.
Thanks in advance
matrix random sparse-arrays
$endgroup$
I am trying to generate a binary matrix (whose elements are 0 or 1) of dimension 20x20. To do this, I want to supply as input the number of matrix elements that will take value 1. After, I want to draw randomly distinct position of those elements (values 1). I thought of doing this:
n = 20; (*matrix dimension*)
d = 300; (*number of matrix elements that will assume value 1*)
rules = RandomInteger[1, n, d, 2]; (*defines the position of the matrix elements*)
rules2 = Table[rules[[i]] -> 1, i, Length[rules]]; (*applies the list of random positions the value 1*)
s = SparseArray[rules2] (*creates the binary random matrix*)
However, this method is not efficient because it does not create 300 different random positions (some are repeated). For example, the result appears 212 filled matrix elements (many of the positions contains summed values).
SparseArray[<212>,20,20]
I would like to know if anyone could help me solve this problem of generating 300 numbers 1 in random positions in a 20x20 dimension matrix.
Thanks in advance
matrix random sparse-arrays
matrix random sparse-arrays
edited Mar 17 at 13:09
J. M. is slightly pensive♦
98.1k10305465
98.1k10305465
asked Mar 17 at 12:52
SACSAC
1938
1938
add a comment |
add a comment |
5 Answers
5
active
oldest
votes
$begingroup$
This might work:
n = 20;
d = 300;
s = Join[ConstantArray[1, d], ConstantArray[0, n^2 - d]];
a = Partition[RandomSample[s], n]
Total[a, 2]
300
$endgroup$
add a comment |
$begingroup$
r = RandomSample[Range[400], 300];
q = Array[0 &, 400];
q[[r]] = 1;
Q = ArrayReshape[q, 20, 20] // MatrixForm
$endgroup$
$begingroup$
Quite nice. Here's a shorter variation:ArrayReshape[SparseArray[Transpose[RandomSample[Range[400], 300]] -> 1, 400], 20, 20]
$endgroup$
– J. M. is slightly pensive♦
Mar 17 at 14:34
$begingroup$
@J. M. Thank you! And I like your version too! Have not been as familiar withSparseArray[]
as some of the other commands, because I never really use it. But now I see its benefit here. Ironically, most (75%) of the entries are ones!
$endgroup$
– mjw
Mar 17 at 15:11
$begingroup$
Indeed, it's not actually "sparse" in that sense. So, just turn things around a bit:ArrayReshape[SparseArray[Transpose[RandomSample[Range[400], 100]] -> 0, 400, 1], 20, 20]
$endgroup$
– J. M. is slightly pensive♦
Mar 17 at 15:27
$begingroup$
Yes! Very much agreed. Even more efficient!
$endgroup$
– mjw
Mar 17 at 15:30
add a comment |
$begingroup$
In a situation where generating all admissible matrix indices can get prohibitive (e.g. the result of Tuples[]
having too many elements), here is an approach that generates just the needed nonzero indices:
(* random k-subset *)
rs[n_, k_] := Take[PermutationList[RandomPermutation[n]], k]
BlockRandom[SeedRandom[1023, Method -> "ExtendedCA"]; (* for reproducibility *)
With[n = 20, p = 300,
Block[k = 1, idl, id,
idl = rs[n, 2];
While[k < p, id = rs[n, 2];
If[! MemberQ[idl, id], k++; AppendTo[idl, id]]];
mat = SparseArray[idl -> 1, n, n]]]];
Check:
Total[mat, 2]
300
$endgroup$
add a comment |
$begingroup$
Here is a variation of JM's comment to mjw's answer that will be much faster when large matrices (e.g., 10^5 by 10^5) are to be created:
randomBinary[dim_, count_] := ArrayReshape[
SparseArray[Thread[RandomSample[1;;dim^2, count]->1], dim^2],
dim, dim
]
The key idea is that one can use Span
(e.g., 1;;max) as the first argument of RandomSample
. For example:
mat = randomBinary[10^5, 300]; //RepeatedTiming
Total[mat, Infinity]
0.000327, Null
300
Of the other answers, only JM's answer will be able to produce a result, and does so about 4 orders of magnitude more slowly.
$endgroup$
add a comment |
$begingroup$
sa = SparseArray[RandomSample[Tuples[Range@20, 2], 300] -> 1, 20, 20]
Total[sa, 2]
300
Alternatively, without Tuples
:
a2 = Unitize @ Threshold[RandomReal[1, 20, 20], "LargestValues", 300]
a3 = Partition[SparseArray[Partition[RandomSample[Range[20^2], 300], 1] -> 1, 20^2], 20]
a4 = SparseArray[(1 + QuotientRemainder[RandomSample[Range[20^2 - 1], 300], 20]) -> 1,
20, 20]
Total[#, 2] & /@ a2, a3, a4
300, 300, 300
$endgroup$
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%2f193418%2fhow-to-generate-binary-array-whose-elements-with-values-1-are-randomly-drawn%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
5 Answers
5
active
oldest
votes
5 Answers
5
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
This might work:
n = 20;
d = 300;
s = Join[ConstantArray[1, d], ConstantArray[0, n^2 - d]];
a = Partition[RandomSample[s], n]
Total[a, 2]
300
$endgroup$
add a comment |
$begingroup$
This might work:
n = 20;
d = 300;
s = Join[ConstantArray[1, d], ConstantArray[0, n^2 - d]];
a = Partition[RandomSample[s], n]
Total[a, 2]
300
$endgroup$
add a comment |
$begingroup$
This might work:
n = 20;
d = 300;
s = Join[ConstantArray[1, d], ConstantArray[0, n^2 - d]];
a = Partition[RandomSample[s], n]
Total[a, 2]
300
$endgroup$
This might work:
n = 20;
d = 300;
s = Join[ConstantArray[1, d], ConstantArray[0, n^2 - d]];
a = Partition[RandomSample[s], n]
Total[a, 2]
300
answered Mar 17 at 12:59
Henrik SchumacherHenrik Schumacher
57.2k577157
57.2k577157
add a comment |
add a comment |
$begingroup$
r = RandomSample[Range[400], 300];
q = Array[0 &, 400];
q[[r]] = 1;
Q = ArrayReshape[q, 20, 20] // MatrixForm
$endgroup$
$begingroup$
Quite nice. Here's a shorter variation:ArrayReshape[SparseArray[Transpose[RandomSample[Range[400], 300]] -> 1, 400], 20, 20]
$endgroup$
– J. M. is slightly pensive♦
Mar 17 at 14:34
$begingroup$
@J. M. Thank you! And I like your version too! Have not been as familiar withSparseArray[]
as some of the other commands, because I never really use it. But now I see its benefit here. Ironically, most (75%) of the entries are ones!
$endgroup$
– mjw
Mar 17 at 15:11
$begingroup$
Indeed, it's not actually "sparse" in that sense. So, just turn things around a bit:ArrayReshape[SparseArray[Transpose[RandomSample[Range[400], 100]] -> 0, 400, 1], 20, 20]
$endgroup$
– J. M. is slightly pensive♦
Mar 17 at 15:27
$begingroup$
Yes! Very much agreed. Even more efficient!
$endgroup$
– mjw
Mar 17 at 15:30
add a comment |
$begingroup$
r = RandomSample[Range[400], 300];
q = Array[0 &, 400];
q[[r]] = 1;
Q = ArrayReshape[q, 20, 20] // MatrixForm
$endgroup$
$begingroup$
Quite nice. Here's a shorter variation:ArrayReshape[SparseArray[Transpose[RandomSample[Range[400], 300]] -> 1, 400], 20, 20]
$endgroup$
– J. M. is slightly pensive♦
Mar 17 at 14:34
$begingroup$
@J. M. Thank you! And I like your version too! Have not been as familiar withSparseArray[]
as some of the other commands, because I never really use it. But now I see its benefit here. Ironically, most (75%) of the entries are ones!
$endgroup$
– mjw
Mar 17 at 15:11
$begingroup$
Indeed, it's not actually "sparse" in that sense. So, just turn things around a bit:ArrayReshape[SparseArray[Transpose[RandomSample[Range[400], 100]] -> 0, 400, 1], 20, 20]
$endgroup$
– J. M. is slightly pensive♦
Mar 17 at 15:27
$begingroup$
Yes! Very much agreed. Even more efficient!
$endgroup$
– mjw
Mar 17 at 15:30
add a comment |
$begingroup$
r = RandomSample[Range[400], 300];
q = Array[0 &, 400];
q[[r]] = 1;
Q = ArrayReshape[q, 20, 20] // MatrixForm
$endgroup$
r = RandomSample[Range[400], 300];
q = Array[0 &, 400];
q[[r]] = 1;
Q = ArrayReshape[q, 20, 20] // MatrixForm
answered Mar 17 at 14:27
mjwmjw
8859
8859
$begingroup$
Quite nice. Here's a shorter variation:ArrayReshape[SparseArray[Transpose[RandomSample[Range[400], 300]] -> 1, 400], 20, 20]
$endgroup$
– J. M. is slightly pensive♦
Mar 17 at 14:34
$begingroup$
@J. M. Thank you! And I like your version too! Have not been as familiar withSparseArray[]
as some of the other commands, because I never really use it. But now I see its benefit here. Ironically, most (75%) of the entries are ones!
$endgroup$
– mjw
Mar 17 at 15:11
$begingroup$
Indeed, it's not actually "sparse" in that sense. So, just turn things around a bit:ArrayReshape[SparseArray[Transpose[RandomSample[Range[400], 100]] -> 0, 400, 1], 20, 20]
$endgroup$
– J. M. is slightly pensive♦
Mar 17 at 15:27
$begingroup$
Yes! Very much agreed. Even more efficient!
$endgroup$
– mjw
Mar 17 at 15:30
add a comment |
$begingroup$
Quite nice. Here's a shorter variation:ArrayReshape[SparseArray[Transpose[RandomSample[Range[400], 300]] -> 1, 400], 20, 20]
$endgroup$
– J. M. is slightly pensive♦
Mar 17 at 14:34
$begingroup$
@J. M. Thank you! And I like your version too! Have not been as familiar withSparseArray[]
as some of the other commands, because I never really use it. But now I see its benefit here. Ironically, most (75%) of the entries are ones!
$endgroup$
– mjw
Mar 17 at 15:11
$begingroup$
Indeed, it's not actually "sparse" in that sense. So, just turn things around a bit:ArrayReshape[SparseArray[Transpose[RandomSample[Range[400], 100]] -> 0, 400, 1], 20, 20]
$endgroup$
– J. M. is slightly pensive♦
Mar 17 at 15:27
$begingroup$
Yes! Very much agreed. Even more efficient!
$endgroup$
– mjw
Mar 17 at 15:30
$begingroup$
Quite nice. Here's a shorter variation:
ArrayReshape[SparseArray[Transpose[RandomSample[Range[400], 300]] -> 1, 400], 20, 20]
$endgroup$
– J. M. is slightly pensive♦
Mar 17 at 14:34
$begingroup$
Quite nice. Here's a shorter variation:
ArrayReshape[SparseArray[Transpose[RandomSample[Range[400], 300]] -> 1, 400], 20, 20]
$endgroup$
– J. M. is slightly pensive♦
Mar 17 at 14:34
$begingroup$
@J. M. Thank you! And I like your version too! Have not been as familiar with
SparseArray[]
as some of the other commands, because I never really use it. But now I see its benefit here. Ironically, most (75%) of the entries are ones!$endgroup$
– mjw
Mar 17 at 15:11
$begingroup$
@J. M. Thank you! And I like your version too! Have not been as familiar with
SparseArray[]
as some of the other commands, because I never really use it. But now I see its benefit here. Ironically, most (75%) of the entries are ones!$endgroup$
– mjw
Mar 17 at 15:11
$begingroup$
Indeed, it's not actually "sparse" in that sense. So, just turn things around a bit:
ArrayReshape[SparseArray[Transpose[RandomSample[Range[400], 100]] -> 0, 400, 1], 20, 20]
$endgroup$
– J. M. is slightly pensive♦
Mar 17 at 15:27
$begingroup$
Indeed, it's not actually "sparse" in that sense. So, just turn things around a bit:
ArrayReshape[SparseArray[Transpose[RandomSample[Range[400], 100]] -> 0, 400, 1], 20, 20]
$endgroup$
– J. M. is slightly pensive♦
Mar 17 at 15:27
$begingroup$
Yes! Very much agreed. Even more efficient!
$endgroup$
– mjw
Mar 17 at 15:30
$begingroup$
Yes! Very much agreed. Even more efficient!
$endgroup$
– mjw
Mar 17 at 15:30
add a comment |
$begingroup$
In a situation where generating all admissible matrix indices can get prohibitive (e.g. the result of Tuples[]
having too many elements), here is an approach that generates just the needed nonzero indices:
(* random k-subset *)
rs[n_, k_] := Take[PermutationList[RandomPermutation[n]], k]
BlockRandom[SeedRandom[1023, Method -> "ExtendedCA"]; (* for reproducibility *)
With[n = 20, p = 300,
Block[k = 1, idl, id,
idl = rs[n, 2];
While[k < p, id = rs[n, 2];
If[! MemberQ[idl, id], k++; AppendTo[idl, id]]];
mat = SparseArray[idl -> 1, n, n]]]];
Check:
Total[mat, 2]
300
$endgroup$
add a comment |
$begingroup$
In a situation where generating all admissible matrix indices can get prohibitive (e.g. the result of Tuples[]
having too many elements), here is an approach that generates just the needed nonzero indices:
(* random k-subset *)
rs[n_, k_] := Take[PermutationList[RandomPermutation[n]], k]
BlockRandom[SeedRandom[1023, Method -> "ExtendedCA"]; (* for reproducibility *)
With[n = 20, p = 300,
Block[k = 1, idl, id,
idl = rs[n, 2];
While[k < p, id = rs[n, 2];
If[! MemberQ[idl, id], k++; AppendTo[idl, id]]];
mat = SparseArray[idl -> 1, n, n]]]];
Check:
Total[mat, 2]
300
$endgroup$
add a comment |
$begingroup$
In a situation where generating all admissible matrix indices can get prohibitive (e.g. the result of Tuples[]
having too many elements), here is an approach that generates just the needed nonzero indices:
(* random k-subset *)
rs[n_, k_] := Take[PermutationList[RandomPermutation[n]], k]
BlockRandom[SeedRandom[1023, Method -> "ExtendedCA"]; (* for reproducibility *)
With[n = 20, p = 300,
Block[k = 1, idl, id,
idl = rs[n, 2];
While[k < p, id = rs[n, 2];
If[! MemberQ[idl, id], k++; AppendTo[idl, id]]];
mat = SparseArray[idl -> 1, n, n]]]];
Check:
Total[mat, 2]
300
$endgroup$
In a situation where generating all admissible matrix indices can get prohibitive (e.g. the result of Tuples[]
having too many elements), here is an approach that generates just the needed nonzero indices:
(* random k-subset *)
rs[n_, k_] := Take[PermutationList[RandomPermutation[n]], k]
BlockRandom[SeedRandom[1023, Method -> "ExtendedCA"]; (* for reproducibility *)
With[n = 20, p = 300,
Block[k = 1, idl, id,
idl = rs[n, 2];
While[k < p, id = rs[n, 2];
If[! MemberQ[idl, id], k++; AppendTo[idl, id]]];
mat = SparseArray[idl -> 1, n, n]]]];
Check:
Total[mat, 2]
300
answered Mar 17 at 13:23
J. M. is slightly pensive♦J. M. is slightly pensive
98.1k10305465
98.1k10305465
add a comment |
add a comment |
$begingroup$
Here is a variation of JM's comment to mjw's answer that will be much faster when large matrices (e.g., 10^5 by 10^5) are to be created:
randomBinary[dim_, count_] := ArrayReshape[
SparseArray[Thread[RandomSample[1;;dim^2, count]->1], dim^2],
dim, dim
]
The key idea is that one can use Span
(e.g., 1;;max) as the first argument of RandomSample
. For example:
mat = randomBinary[10^5, 300]; //RepeatedTiming
Total[mat, Infinity]
0.000327, Null
300
Of the other answers, only JM's answer will be able to produce a result, and does so about 4 orders of magnitude more slowly.
$endgroup$
add a comment |
$begingroup$
Here is a variation of JM's comment to mjw's answer that will be much faster when large matrices (e.g., 10^5 by 10^5) are to be created:
randomBinary[dim_, count_] := ArrayReshape[
SparseArray[Thread[RandomSample[1;;dim^2, count]->1], dim^2],
dim, dim
]
The key idea is that one can use Span
(e.g., 1;;max) as the first argument of RandomSample
. For example:
mat = randomBinary[10^5, 300]; //RepeatedTiming
Total[mat, Infinity]
0.000327, Null
300
Of the other answers, only JM's answer will be able to produce a result, and does so about 4 orders of magnitude more slowly.
$endgroup$
add a comment |
$begingroup$
Here is a variation of JM's comment to mjw's answer that will be much faster when large matrices (e.g., 10^5 by 10^5) are to be created:
randomBinary[dim_, count_] := ArrayReshape[
SparseArray[Thread[RandomSample[1;;dim^2, count]->1], dim^2],
dim, dim
]
The key idea is that one can use Span
(e.g., 1;;max) as the first argument of RandomSample
. For example:
mat = randomBinary[10^5, 300]; //RepeatedTiming
Total[mat, Infinity]
0.000327, Null
300
Of the other answers, only JM's answer will be able to produce a result, and does so about 4 orders of magnitude more slowly.
$endgroup$
Here is a variation of JM's comment to mjw's answer that will be much faster when large matrices (e.g., 10^5 by 10^5) are to be created:
randomBinary[dim_, count_] := ArrayReshape[
SparseArray[Thread[RandomSample[1;;dim^2, count]->1], dim^2],
dim, dim
]
The key idea is that one can use Span
(e.g., 1;;max) as the first argument of RandomSample
. For example:
mat = randomBinary[10^5, 300]; //RepeatedTiming
Total[mat, Infinity]
0.000327, Null
300
Of the other answers, only JM's answer will be able to produce a result, and does so about 4 orders of magnitude more slowly.
answered Mar 17 at 19:16
Carl WollCarl Woll
70.9k394184
70.9k394184
add a comment |
add a comment |
$begingroup$
sa = SparseArray[RandomSample[Tuples[Range@20, 2], 300] -> 1, 20, 20]
Total[sa, 2]
300
Alternatively, without Tuples
:
a2 = Unitize @ Threshold[RandomReal[1, 20, 20], "LargestValues", 300]
a3 = Partition[SparseArray[Partition[RandomSample[Range[20^2], 300], 1] -> 1, 20^2], 20]
a4 = SparseArray[(1 + QuotientRemainder[RandomSample[Range[20^2 - 1], 300], 20]) -> 1,
20, 20]
Total[#, 2] & /@ a2, a3, a4
300, 300, 300
$endgroup$
add a comment |
$begingroup$
sa = SparseArray[RandomSample[Tuples[Range@20, 2], 300] -> 1, 20, 20]
Total[sa, 2]
300
Alternatively, without Tuples
:
a2 = Unitize @ Threshold[RandomReal[1, 20, 20], "LargestValues", 300]
a3 = Partition[SparseArray[Partition[RandomSample[Range[20^2], 300], 1] -> 1, 20^2], 20]
a4 = SparseArray[(1 + QuotientRemainder[RandomSample[Range[20^2 - 1], 300], 20]) -> 1,
20, 20]
Total[#, 2] & /@ a2, a3, a4
300, 300, 300
$endgroup$
add a comment |
$begingroup$
sa = SparseArray[RandomSample[Tuples[Range@20, 2], 300] -> 1, 20, 20]
Total[sa, 2]
300
Alternatively, without Tuples
:
a2 = Unitize @ Threshold[RandomReal[1, 20, 20], "LargestValues", 300]
a3 = Partition[SparseArray[Partition[RandomSample[Range[20^2], 300], 1] -> 1, 20^2], 20]
a4 = SparseArray[(1 + QuotientRemainder[RandomSample[Range[20^2 - 1], 300], 20]) -> 1,
20, 20]
Total[#, 2] & /@ a2, a3, a4
300, 300, 300
$endgroup$
sa = SparseArray[RandomSample[Tuples[Range@20, 2], 300] -> 1, 20, 20]
Total[sa, 2]
300
Alternatively, without Tuples
:
a2 = Unitize @ Threshold[RandomReal[1, 20, 20], "LargestValues", 300]
a3 = Partition[SparseArray[Partition[RandomSample[Range[20^2], 300], 1] -> 1, 20^2], 20]
a4 = SparseArray[(1 + QuotientRemainder[RandomSample[Range[20^2 - 1], 300], 20]) -> 1,
20, 20]
Total[#, 2] & /@ a2, a3, a4
300, 300, 300
edited Mar 17 at 19:42
answered Mar 17 at 13:03
kglrkglr
189k10206424
189k10206424
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.
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%2f193418%2fhow-to-generate-binary-array-whose-elements-with-values-1-are-randomly-drawn%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