Problem with python code. Combinations of 2-state vectors

Click For Summary
SUMMARY

The discussion centers on generating all combinations of a four-element vector containing only 1's and -1's using Python. The user initially implemented a method involving random sign changes and a comparison loop, which resulted in inefficient code that failed to produce all combinations. The solution was ultimately found with assistance, indicating that the original approach was flawed but led to a successful resolution.

PREREQUISITES
  • Understanding of Python programming, specifically loops and conditionals
  • Familiarity with list data structures in Python
  • Basic knowledge of random number generation in Python
  • Concept of combinatorial generation in programming
NEXT STEPS
  • Explore Python's itertools library for generating combinations efficiently
  • Learn about recursive algorithms for combinatorial problems
  • Investigate the use of NumPy for handling large arrays and vector operations
  • Study optimization techniques for improving algorithm efficiency in Python
USEFUL FOR

This discussion is beneficial for Python developers, students working on combinatorial algorithms, and anyone interested in improving their coding efficiency and problem-solving skills in Python.

wyosteve
Messages
23
Reaction score
0
I am trying to find all combinations of a four element vector that contains only 1's and -1's.
Ex (1,1,1,1),(-1,1,1,1),...(-1,-1,-1,-1) etc
My idea to do this is pretty inefficient I am sure but I can't think of another way to do it, so here is what I was trying to do.
I found how many total vectors there would be, then created that many empty lists. I began with vector `A` and then compared this to each list in `vectors`. If `A` matched any of the lists then I randomly changed the sign of an element of `A`, and then again checked the new list `A` against `vectors`. If `A` didn't find a match then it replaced on of the lists in `vectors`, and the while loop was incremented by 1. This should proceed until all possible combinations have been found and printed.
However my code is just spitting out the first change in `vectors` then continually looping without adding any new `A`'s to `vectors`. Can anyone spot what in my code isn't doing what I intended it to do and/or point me in the right direction? Thanks

Code:
import random
    numvec = 2**4 # number of macrostates for a 4 component 2-state system

    vectors = [[0,0,0,0] for i in range(numvec)] #initializing the numvec vectors 
    A = [1,1,1,1]
    i = 0
    while i < 16:
        if any(x == A for x in vectors):
            y = random.randrange(0, 3)
            A[y] = A[y] * -1
        else:
            vectors[i] = A
            print vectors[i] 
            i += 1
      
    print vectors

Oh and again I realize this method is incredibly inefficient but as this is a homework assignment I am more concerned with being able to get python to do what I want it to do, then using a bunch of built in functions to do the work for me. Thanks again.
 
Technology news on Phys.org
never mind, figured it out (with help)
 

Similar threads

  • · Replies 4 ·
Replies
4
Views
4K
Replies
1
Views
2K
  • · Replies 3 ·
Replies
3
Views
1K
Replies
5
Views
2K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 34 ·
2
Replies
34
Views
6K
  • · Replies 11 ·
Replies
11
Views
1K
  • · Replies 2 ·
Replies
2
Views
1K