Python 如何传输数据,并根据条件将数据从一个多维数组修剪到另一个多维数组

Python 如何传输数据,并根据条件将数据从一个多维数组修剪到另一个多维数组,python,Python,我已经构建了一个python程序来处理各种数据集的概率。我“手动”输入各种平均值和标准偏差,这是可行的,但我需要将其自动化,以便通过文本或csv文件上传所有数据。到目前为止,我已经有了一个嵌套的for循环查询,我认为它有索引问题,但下面是一些背景 我的代码适用于一个小数据集,我可以手动输入6-8个参数,但现在我需要将其自动化,并通过csv/文本文件上传各种未知大小的输入。我正在复制我现有的代码,并在适当的地方对其进行修改,但我遇到了一个问题 我有一个2_D numpy数组,其中一些概率被反向排序

我已经构建了一个python程序来处理各种数据集的概率。我“手动”输入各种平均值和标准偏差,这是可行的,但我需要将其自动化,以便通过文本或csv文件上传所有数据。到目前为止,我已经有了一个嵌套的for循环查询,我认为它有索引问题,但下面是一些背景

我的代码适用于一个小数据集,我可以手动输入6-8个参数,但现在我需要将其自动化,并通过csv/文本文件上传各种未知大小的输入。我正在复制我现有的代码,并在适当的地方对其进行修改,但我遇到了一个问题

我有一个2_D numpy数组,其中一些概率被反向排序。我有第二个数组,它给了我每行68.3%的值,我想修剪低值31.7%的数据

我需要一个可以处理未指定行数的解决方案

我以前为单个一维数组编写的代码是

    prob_combine_sum= np.sum(prob_combine)

    #Reverse sort the probabilities
    prob_combine_sorted=sorted(prob_combine, reverse=True)

    #Calculate 1 SD from peak Prob by multiplying Total Prob by 68.3%
    sixty_eight_percent=prob_combine_sum*0.68269

    #Loop over the sorted list and append the 1SD data into a list 
    #onesd_prob_combine
    onesd_prob_combine=[]
    for i in prob_combine_sorted:
    onesd_prob_combine.append(i)
    if sum(onesd_prob_combine) > sixty_eight_percent:
    break
成功了。然而,现在我有了一个多维数组,我想从这个多维数组中获取1个标准偏差数据,并将其粘贴到另一个数组中

可能不止一种方法可以做到这一点,但我想我会坚持使用for循环,但现在索引更复杂了。我需要保留数据结构,并且我需要能够在将来处理无限数量的行

我模拟了一些数据,如果我能用它来工作,我应该可以把它放在我的程序中

    sorted_probabilities=np.asarray([[9,8,7,6,5,4,3,2,1], 
    [87,67,54,43,32,22,16,14,2],[100,99,78,65,45,43,39,22,3], 
    [67,64,49,45,42,40,28,23,17]])
    sd_test=np.asarray([30.7215,230.0699,306.5323,256.0125])
    target_array=np.zeros(4).reshape(4,1)

    #Task transfer data from sorted_probabilities to target array on 
    condition that value in each target row is less than the value in the 
    sd_test array.

    #Ignore the problem that data transferred won't add up to 68.3%.
    My real data-sample is very big.  I just need a way of trimmining 
    and transferring.


    for row in sorted_probabilities:
        for element in row:
        target_array[row].append[i]
        if sum(target[row]) > sd_test[row]:
            break
错误:索引器错误:索引9超出大小为4的轴0的界限

我知道这不是一个很好的尝试。我的问题是,我需要一个解决方案,它将适用于任何二维数组,而不仅仅是一个4行

我真的很感激你的帮助

多谢各位

编辑:

有人能帮我解决这个问题吗?我在挣扎

我认为我的循环不起作用的原因是我使用的“索引”行不是一个数字,而是一行。我会考虑一下的。在此期间,有人有解决办法吗

谢谢

阅读评论后,我尝试了以下代码:

    for counter, value in enumerate(sorted_probabilities):

        for i, element in enumerate(value):

        target_array[counter]=sorted_probabilities[counter][element]

        if target_array[counter] > sd_test[counter]:
               break
我得到一个错误:索引器错误:索引9超出了大小为9的轴0的界限


我想这是因为我想给numpy数组添加预先确定的维度?我不确定。我现在要尝试另一种方法,因为我不能用这种方法做到这一点。它必须维护目标数组中的行,这使得维护变得困难。每一行都与一个对象相关,如果我失去了结构,它将毫无意义

我建议你使用熊猫。您可以直接读取数据框中的csv,并对列等执行多个操作,这些操作干净整洁。

您将numpy数组与python列表混合使用。最好只使用其中一种(numpy是首选)。还要尝试调试代码,因为它有语法和逻辑错误。您没有变量
i
,尽管您使用它作为索引;当它是一个numpy数组而不是一个整数时,您也使用
作为索引

我强烈建议你

0)调试代码(至少打印)

1) 用于为循环创建两个

2) 将
append
替换为普通赋值,因为您已经创建了一个空向量(
target\u array
)。或者将
目标数组
初始化为空列表并追加到其中

3) 如果要将解决方案用于任何二维阵列,请将代码包装到一个

中,尝试以下操作:

sorted_probabilities=np.asarray([[9,8,7,6,5,4,3,2,1], 
                                 [87,67,54,43,32,22,16,14,2],
                                 [100,99,78,65,45,43,39,22,3],            
                                 [67,64,49,45,42,40,28,23,17]]
                                )
sd_test=np.asarray([30.7215,230.0699,306.5323,256.0125])
target_array=np.zeros(4).reshape(4,1)

for counter, value in enumerate(sorted_probabilities):
    for i, element in enumerate(value):
        target_array[counter] = element  # Here I removed the code that produced error
        if target_array[counter] > sd_test[counter]:
           break

我希望将数据从一个数组传输到另一个数组,并对其进行处理,以便获取最大值。熊猫会帮忙吗?我以后可能会使用它们,但现在我正在寻找一个解决方案。我尝试了以下代码:对于计数器,枚举中的值(排序的_概率):对于I,计数中的元素(值):rarget_数组[counter]=排序的_概率[counter][element]如果目标_数组[counter]>sd_测试[counter]:dataframe列是一个数组;您可以创建另一列并在其中输入值,条件为:例如df['newColumn']=df[df['oldColumn']>=0]。查看pandas文档,它提供了更多其他可能性。我发现了使用行作为索引的问题,但无法通过循环解决。无论我做什么,似乎都会产生错误!我会考虑一个函数。感谢您的审阅。我尝试了enumerate,但仍然无法完成。见我的编辑在上面的主要职位。我将尝试另一个角度。