## Python - Split array into multiple arrays

Something like that should work:

`import itertools`

mylist = [...]

[list(v) for k,v in itertools.groupby(mylist, key=lambda x: x[:3])]

If input list isn't sorted, than use something like that:

`import itertools`

mylist = [...]

keyfunc = lambda x:x[:3]

mylist = sorted(mylist, key=keyfunc)

[list(v) for k,v in itertools.groupby(mylist, key=keyfunc)]

## How to split an array into multiple arrays based on a specific value in python

You can achieve that relatively easy with iterator:

`import numpy as np`

def split_by_min(arr):

equals = np.isclose(arr, np.abs(arr).min())

l = []

is_ready = False

for i in range(len(arr)):

if equals[i] and i < len(arr)-1 and equals[i+1]:

is_ready = True

elif not equals[i] and is_ready:

yield l

l = []

is_ready = False

if not is_ready:

l.append(arr[i])

yield l

arr = np.array([-0.005,-0.004,0.00002,-0.003,0.004,0.00002,0.00002,0.00002,

0.00002,0.005,0.003,0.00002,0.0006,0.008,0.00002,0.00002,

0.00002,-0.003,0.006,0.007,0.00002,0.00002,0.00002])

for l in split_by_min(arr):

print(l)

Output:

`[-0.005, -0.004, 2e-05, -0.003, 0.004]`

[0.005, 0.003, 2e-05, 0.0006, 0.008]

[-0.003, 0.006, 0.007]

## Split an array into multiple arrays by condition

Here is one approach:

`import numpy as np`

np.random.seed(0)

# get an increasing array

arr = np.random.randint(0, 400, size=50).cumsum()

bracket_size = 2000

brackets = np.arange(0, arr.max() + bracket_size, bracket_size)

# array([ 0, 2000, 4000, 6000, 8000, 10000])

result = np.split(arr, np.unique(np.searchsorted(brackets, arr), return_index=True)[1])

# [array([], dtype=int64),

# array([ 172, 219, 336, 528, 851, 1102, 1297, 1656, 1665, 1876]),

# array([2153, 2395, 2687, 2774, 2844, 2932, 3328, 3642, 3835, 3874, 3961]),

# array([4135, 4223, 4560, 4725, 4750, 5083, 5155, 5420, 5535, 5778, 5975]),

# array([6310, 6648, 6747, 6924, 7167, 7452, 7599, 7746]),

# array([8144, 8432, 8697, 8882, 9009, 9041, 9072, 9274, 9518, 9669])]

You can first compute an array of "brackets" that specifies where each element of your array should go. Then, you can assign each array element to the correct bracket using `np.searchsorted`

. Since `split`

expects a list of indices where the arryay should be split, one can use `np.unique`

to find the first index where a split for each bracket should occur.

## Avoid for-loop to split array into multiple arrays by index values using numpy

Does this suffice?

### Solution 1 (Note: for loop is not over the entire index array)

`import numpy as np`

value_array = np.array([56, 10, 65, 37, 29, 14, 97, 46])

index_array = np.array([ 0, 0, 1, 0, 3, 0, 1, 1])

max_idx = np.max(index_array)

split_array = []

for idx in range(max_idx + 1):

split_array.append([])

split_array[-1].extend(list(value_array[np.where(index_array == idx)]))

print(split_array)

`[[56, 10, 37, 14], [65, 97, 46], [], [29]]`

### Solution 2

`import numpy as np`

value_array = np.array([56, 10, 65, 37, 29, 14, 97, 46])

index_array = np.array([ 0, 0, 1, 0, 3, 0, 1, 1])

value_array = value_array[index_array.argsort()]

split_idxs = np.squeeze(np.argwhere(np.diff(np.sort(index_array)) != 0) + 1)

print(np.array_split(value_array, split_idxs))

`[array([56, 10, 37, 14]), array([65, 97, 46]), array([29])]`

## Split array in multiple new arrays depending on the values

If I understand you right, you want to group the array to positive/negative:

`from itertools import groupby`

l = [-20.2,-19.7,-19.2,-18.9,-18.8,-18.8,-18.9,-18.9,-18.9,-18.9,-18.9,-18.9,-19.,-19.1,-19.1,-18.9,-18.5,-18.3,-18.9,-20.8,-24.1,-27.2,-28.1,-24.6,19.1,63.4,104.2,143.8,140.9,120.3,91.7,64.5,46.4,38.2,39.,47.8,63.3,82.9,103.5,122.1,136.4,147.1,155.3,162.5,169.7,177.,184.4,191.8,199.2,207.5,217.7,230.7,246.3,260.2,266.7,260.3,237.5,203.1,164.1,127.3,98.,75.3,56.7,39.9,22.7,5.5,-11.2,-26.5,-40.4,-54.9,-72.7,-96.5,-79.3,-67.2,-59.,-53.,-48.1,-44.,-40.7,-37.9,-35.6,-33.6,-31.9,-30.3,-28.7,-27.1,-25.7,-24.6,-23.8,-23.4,-23.,-22.7,-22.3,-21.9,-21.4,-20.8]

out = []

for _, g in groupby(l, lambda x: x<0):

out.append(list(g))

# print the lists:

for subl in out:

print(subl)

Prints:

`[-20.2, -19.7, -19.2, -18.9, -18.8, -18.8, -18.9, -18.9, -18.9, -18.9, -18.9, -18.9, -19.0, -19.1, -19.1, -18.9, -18.5, -18.3, -18.9, -20.8, -24.1, -27.2, -28.1, -24.6]`

[19.1, 63.4, 104.2, 143.8, 140.9, 120.3, 91.7, 64.5, 46.4, 38.2, 39.0, 47.8, 63.3, 82.9, 103.5, 122.1, 136.4, 147.1, 155.3, 162.5, 169.7, 177.0, 184.4, 191.8, 199.2, 207.5, 217.7, 230.7, 246.3, 260.2, 266.7, 260.3, 237.5, 203.1, 164.1, 127.3, 98.0, 75.3, 56.7, 39.9, 22.7, 5.5]

[-11.2, -26.5, -40.4, -54.9, -72.7, -96.5, -79.3, -67.2, -59.0, -53.0, -48.1, -44.0, -40.7, -37.9, -35.6, -33.6, -31.9, -30.3, -28.7, -27.1, -25.7, -24.6, -23.8, -23.4, -23.0, -22.7, -22.3, -21.9, -21.4, -20.8]

## How to split an array into chunks of a given length in python?

Why don't you try out a list comprehension?

**Example:**

`[ids[i:i+2] for i in range(0,len(ids),2)]`

**Output:**

`[[1, 2], [3, 4], [5, 6], [7, 8], [9]]`

### Related Topics

Printing Lists in Python Without Spaces

Keras Valueerror: Input 0 Is Incompatible With Layer Conv2D_1: Expected Ndim=4, Found Ndim=5

A Way to Quick Preview .Ipynb Files

How to Create Different Variable Names While in a Loop

How to Determine Whether a Pandas Column Contains a Particular Value

How to Remove Empty Cell from Data Frame Row Wise

Webdriverexception: Message: Unknown Error: Chrome Failed to Start: Crashed

How to Concatenate/Append Multiple Spark Dataframes Column Wise in Pyspark

Finding a Substring Within a String Without Using Any Built in Functions

Redirect Command Line Results to a Tkinter Gui

How to Install a Module for All Users With Pip on Linux

How to Remove Text Within Parentheses With a Regex

How to Make Python Get the Username in Windows and Then Implement It in a Script

Check If a Specific Class and Value Exist in HTML Using Beautifulsoup Python

How to Detect and Remove Outliers from Each Column of Pandas Dataframe At One Go