Shuffling an array every run in Python

Question:

In this code, I am trying to shuffle an array r2 using np.random.shuffle() and save it in CSV format in multiple folders with every run. But it doesn’t actually shuffle. I don’t know why.

import os
import csv
import numpy as np

Runs=2

r2=np.array([[54.3817864 , 53.42810469, 47.94544424, 53.63511598, 49.59728558,
        49.6935623 , 50.70031442, 52.80854701, 50.18808714, 51.80017684,
        51.85747597, 54.3817864 ]])

def function(run):
    parent_folder = str(run + 1)
    os.mkdir(parent_folder)

    
    with open(os.path.join(parent_folder, rf"Inv_Radius_220ND.csv"), 'w+') as f: 
      np.random.shuffle(r2)
      print(f'{run}:{r2}')
      writer = csv.writer(f)
      writer.writerows(r2)
      
for x in range(Runs):
    function(x)      

The current output is:

0:[[54.3817864  53.42810469 47.94544424 53.63511598 49.59728558 49.6935623
  50.70031442 52.80854701 50.18808714 51.80017684 51.85747597 54.3817864 ]]
1:[[54.3817864  53.42810469 47.94544424 53.63511598 49.59728558 49.6935623
  50.70031442 52.80854701 50.18808714 51.80017684 51.85747597 54.3817864 ]]
Asked By: user20032724

||

Answers:

np.random.shuffle(r2) is shuffling the 1st dimension of a two-dimensional array. Since the 1st dimension only contains one array, there’s nothing to shuffle.

This should do what you want:

>>> r2
array([[54.3817864 , 53.42810469, 47.94544424, 53.63511598, 49.59728558,
        49.6935623 , 50.70031442, 52.80854701, 50.18808714, 51.80017684,
        51.85747597, 54.3817864 ]])
>>> np.random.shuffle(r2[0])
>>> r2
array([[47.94544424, 54.3817864 , 50.18808714, 49.6935623 , 49.59728558,
        50.70031442, 52.80854701, 51.85747597, 53.42810469, 53.63511598,
        54.3817864 , 51.80017684]])
Answered By: sj95126
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.