首页 > 解决方案 > 如何根据数组中的值拆分数组?

问题描述

基本上我有一个数据数组,我想根据数组的最小值分成2个。我尝试了一个 for 循环,但它根据值的大小将其拆分,而不是有效地,如果它位于该值的左侧或右侧。我想我正在寻找像 numpy 中的 split 模块这样有效的东西,但它返回 2 个独立的单独数组,而不是其中包含子数组的数组。

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

显然因为 7.2e-10 是最小值,所有值都转到 node2 并且 node1 仍然是一个空数组。最小值位于我的数据数组中间的某个位置,我希望它之前的所有内容都存储在 node1 中,之后的所有内容都存储在 node2 中。我隐约知道 np.where 是什么,但我似乎无法在这里正确应用它。如何更改 if 循环的条件以使其正常工作?非常感谢你的帮忙!

编辑:使用数组索引的想法,我到了这里:

 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 数组,并使 node2 为空......我不知道为什么。teh get_lowest_minima(profile_coarse)[0] 位是元组的整数元素,而 profile_coarse 是我的数据数组。帮助!

标签: pythonarrayspython-3.xsortingsplit

解决方案


您需要的是找到最小值的索引,然后根据该索引拆分数组。

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]

推荐阅读