Skip to main content
Tweeted twitter.com/StackCodeReview/status/1372699358181867521
deleted 4 characters in body
Source Link
Ben A
  • 10.8k
  • 5
  • 40
  • 103

How to use "np.where()" to generate *multiple* Generating multiple new arrays using numpy

Say I have the following two different states:

state1 = [0, 1, 0, 1, 1]
state2 = [1, 1, 0, 0, 1]

And I want to generate n number of new states by only changing the values at where these states differ; and I want to do so randomly. So I did the following:

state1 = np.array(state1)
differ = np.where(state1 != state2)[0]  # --> array([0, 3], dtype=int64)

rand = [random.choices([1, 0], k=len(differ)) for _ in range(4)]
states = [state1.copy() for _ in range(4)]

for i in range(len(states)):
    states[i][differ] = rand[i]  # Will replace the values at locations where they are mismatched only

Out:

[array([1, 1, 0, 0, 1]),
 array([1, 1, 0, 1, 1]),
 array([0, 1, 0, 1, 1]),
 array([0, 1, 0, 1, 1])]

This does the job but I was wondering if there is a better way (to avoid 2 ```for```for loops), but this was the best I could come up with. Any ideas on how to do the same thing but better/cleaner?

How to use "np.where()" to generate *multiple* new arrays

Say I have the following two different states:

state1 = [0, 1, 0, 1, 1]
state2 = [1, 1, 0, 0, 1]

And I want to generate n number of new states by only changing the values at where these states differ; and I want to do so randomly. So I did the following:

state1 = np.array(state1)
differ = np.where(state1 != state2)[0]  # --> array([0, 3], dtype=int64)

rand = [random.choices([1, 0], k=len(differ)) for _ in range(4)]
states = [state1.copy() for _ in range(4)]

for i in range(len(states)):
    states[i][differ] = rand[i]  # Will replace the values at locations where they are mismatched only

Out:

[array([1, 1, 0, 0, 1]),
 array([1, 1, 0, 1, 1]),
 array([0, 1, 0, 1, 1]),
 array([0, 1, 0, 1, 1])]

This does the job but I was wondering if there is a better way (to avoid 2 ```for``` loops), but this was the best I could come up with. Any ideas on how to do the same thing but better/cleaner?

Generating multiple new arrays using numpy

Say I have the following two different states:

state1 = [0, 1, 0, 1, 1]
state2 = [1, 1, 0, 0, 1]

And I want to generate n number of new states by only changing the values at where these states differ; and I want to do so randomly. So I did the following:

state1 = np.array(state1)
differ = np.where(state1 != state2)[0]  # --> array([0, 3], dtype=int64)

rand = [random.choices([1, 0], k=len(differ)) for _ in range(4)]
states = [state1.copy() for _ in range(4)]

for i in range(len(states)):
    states[i][differ] = rand[i]  # Will replace the values at locations where they are mismatched only

Out:

[array([1, 1, 0, 0, 1]),
 array([1, 1, 0, 1, 1]),
 array([0, 1, 0, 1, 1]),
 array([0, 1, 0, 1, 1])]

This does the job but I was wondering if there is a better way (to avoid 2 for loops), but this was the best I could come up with. Any ideas on how to do the same thing but better/cleaner?

Source Link

How to use "np.where()" to generate *multiple* new arrays

Say I have the following two different states:

state1 = [0, 1, 0, 1, 1]
state2 = [1, 1, 0, 0, 1]

And I want to generate n number of new states by only changing the values at where these states differ; and I want to do so randomly. So I did the following:

state1 = np.array(state1)
differ = np.where(state1 != state2)[0]  # --> array([0, 3], dtype=int64)

rand = [random.choices([1, 0], k=len(differ)) for _ in range(4)]
states = [state1.copy() for _ in range(4)]

for i in range(len(states)):
    states[i][differ] = rand[i]  # Will replace the values at locations where they are mismatched only

Out:

[array([1, 1, 0, 0, 1]),
 array([1, 1, 0, 1, 1]),
 array([0, 1, 0, 1, 1]),
 array([0, 1, 0, 1, 1])]

This does the job but I was wondering if there is a better way (to avoid 2 ```for``` loops), but this was the best I could come up with. Any ideas on how to do the same thing but better/cleaner?