【问题标题】:how to split array based on value in array?如何根据数组中的值拆分数组?
【发布时间】:2020-03-04 15:18:38
【问题描述】:

基本上我有一个数据数组,我想根据数组的最小值分成 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 是我的数据数组。帮忙!

【问题讨论】:

  • 提示:你关心元素的index,而不是它的值。了解切片
  • 非常公平 - 没有正确理解以前的帽子!这就是我试图做的事情 - 但它不起作用。有任何想法吗?编辑:我把它放在问题中,因为那里的格式很好
  • @Adam.Er8 仍然非常感谢您的帮助!我今天才能够再次拿起这个项目。

标签: python arrays python-3.x sorting split


【解决方案1】:

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

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]

【讨论】:

    【解决方案2】:

    这是一个简单的解决方案:

    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__)
    

    更多详情请查看this问题。

    【讨论】:

      猜你喜欢
      • 2013-04-07
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多