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
My co-worker is secretly taking pictures of me
What is this high flying aircraft over Pennsylvania?
Why does the Persian emissary display a string of crowned skulls?
Would this string work as string?
Would a primitive species be able to learn English from reading books alone?
Can I say "fingers" when referring to toes?
Mimic lecturing on blackboard, facing audience
What does the word 'upstream' mean in the context?
How to preserve electronics (computers, iPads and phones) for hundreds of years
Typing CO_2 easily
Possible Eco thriller, man invents a device to remove rain from glass
Writing in a Christian voice
What (if any) is the reason to buy in small local stores?
How much do grades matter for a future academia position?
Is there a distance limit for minecart tracks?
How to make a list of partial sums using forEach
Purpose of creating non root user
Why do Radio Buttons not fill the entire outer circle?
"Oh no!" in Latin
New Order #2: Turn My Way
What is the meaning of "You've never met a graph you didn't like?"
How to make a small $varhexagon$ in latex?
Quoting Keynes in a lecture
What should be the ideal length of sentences in a blog post for ease of reading?
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
57k577157
57k577157
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
8759
8759
$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 2 days ago
Carl WollCarl Woll
70.8k394184
70.8k394184
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 2 days ago
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