Как разделить массив на основе значения в массиве? - PullRequest
0 голосов
/ 04 марта 2020

В основном у меня есть массив данных, и я хочу разделить на 2 на основе минимумов массива. Я попытался a для l oop, но он разбивает его на основе величины значений, а не эффективно, если это слева или справа от этого значения. Я думаю, что я ищу что-то вроде модуля разделения в numpy, но это возвращает 2 независимых отдельных массива, а не массив с подмассивами в нем.

node1=[]
node2=[]
for i in profile_coarse:
    if i<7.2e-10: 
        node1.append(i)
    else:
        node2.append(i)

очевидно, потому что 7.2e-10 - минимумы, все значения go для узла2 и узла1 остаются пустым массивом. Минимумы находятся где-то посередине моего массива данных, и я хочу, чтобы все, что было до этого, было сохранено в node1 и все после в node2. я смутно знаю, что такое np.where, но я не могу применить это здесь правильно. как я могу изменить условие if l oop так, чтобы оно работало? Большое спасибо за помощь!

РЕДАКТИРОВАТЬ: используя идею индекса массива, я получил здесь:

 node1=[]
 node2=[]
for index in enumerate(profile_coarse):
    if i<get_lowest_minima(profile_coarse)[0]:                        
        node1.append(i)
    else:
        node2.append(i)
print("array node1", node1, "array node2", node2)

, который не работает - он заполняет массив node1 и оставляет узел2 пустой ... я не могу понять, почему. get_lowest_minima (profile_coarse) [0] бит - это элемент interger в кортеже, а profile_coarse - массив моих данных. помощь!

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Вам нужно найти индекс минимального значения, а затем разбить массив на основе этого индекса.

import numpy as np


a = np.random.randint(0, 255, 10). # sample data [  9  33 155  48 196   3  96 185 112 104]

min_index = np.argmin(a)

node1 = a[:min_index]  # [  9  33 155  48 196]
node2 = a[min_index:]  # [  3  96 185 112 104]
1 голос
/ 04 марта 2020

Вот простое решение:

split_index = data.index(min(data))
data1 = data[:split_index]
data2 = data[split_index+1:]

Вы также можете найти split_index с:

split_index = min(range(len(data)), key=data.__getitem__)

Для более подробной информации проверьте этот вопрос.

...