Suppose I want to list out all possible permutations of N indicator functions.  e.g. if N = 2 then I would want to return (1,0),(0,1),(1,1),(0,0) Is there a function to do this in Julia?  I know I can collect permutations with the combinatorics package but that seems to require a fixed array.  So if I did
collect(permutations(0:1,2))
2-element Vector{Vector{Int64}}:
[0, 1]
[1, 0]
Whereas if the number of 1’s is Bernoulli then the array to be permutated will vary.   So just wondering if there was a built in function that I am missing.  Thanks!
             
            
              
              
              
            
            
           
          
            
            
              Not sure what you actually want to achieve in general and what you mean  indicator functions but maybe the following might help
N=2
for i=0:2^N-1
    @show digits(i,base=2,pad=N)
end
             
            
              
              
              4 Likes
            
            
           
          
            
            
              Awesome thanks so much! sorry I was unclear.  I just mean that if I have N coin tosses and I want to list out all possible outcomes if there was a built in function to do that?  So if N = 6 I should have 64 permutations I think.  But with the included code I only get thirty some results? On the other hand if I try i=0:2^N I get a vector with 7 entries?  Also would it be possible to store the output as an array with @show?
             
            
              
              
              
            
            
           
          
            
            
              The code I provided does that i think. For N=6 I get indeed 64 different outcomes
(note 2^N-1 is (2^N) -1 )
As for storing, up to you to store them in anything you want. You have i and the array of digits, so you can store into an array of array, or a matrix or whatever you need. I just wrote the @show to show what you get with the digits approach.
             
            
              
              
              1 Like
            
            
           
          
            
            
              
Broadcast digits:
digits.(0:(2^N-1), base=2, pad=N)
             
            
              
              
              3 Likes
            
            
           
          
            
            
              See this other post for an alternative solution using Base Iterators.product:
import Base.Iterators: flatten, product
N = 6
collect(flatten([product([0:1 for _ in 1:N]...)])) 
             
            
              
              
              1 Like
            
            
           
          
            
            
              Note that storing them as arrays is wildly inefficient. If you want an efficient representation of an indicator function, you cannot do better than a binary integer.
             
            
              
              
              3 Likes
            
            
           
          
            
            
              awesome thanks, yes I mistook the original for 2^(N-1). Thanks to everyone for all the very helpful comments and making Julia accessible!