比较numpy数组中的元素,并将相等的元素添加到新数组中

时间:2018-08-14 20:42:05

标签: python arrays python-3.x numpy compare

CSV file我有一个带有907行和2列的numpy数组,这些列分别对应于x和y坐标。我想编写一个代码,列出所有具有相同Y的元素。 这是我现在写的代码,我知道这是错误的。任何帮助将不胜感激。

import csv
import numpy as np
with open('Results.csv') as csvfile:
    readCSV = csv.reader(csvfile,delimiter=',')
    integers=np.array([list(map(int,x)) for x in readCSV]);

    val=0
    list_val=[]
    for i in integers:
        if i[1]==val:
        list_val=i   
        val += 1

1 个答案:

答案 0 :(得分:0)

尝试以最少的代码更改来回答这个问题。您的代码中主要存在三个问题:

1)您正在使用val遍历Y坐标的所有可能值,但是val实际上并没有采用所有可能的Y值。下面的代码在假设您只有非负整数Y值的情况下工作,并且我用val替换了max_y,以更好地了解如何在逻辑上遍历所有可能的Y坐标值。

2)您将需要两个循环:一个循环遍历所有可能的Y值,而内部循环遍历integers中的所有X,Y对。

3)由于Y有多个可能的值,因此将具有相同Y值的元素存储在列表中将意味着您需要多个列表才能实现所要尝试的功能。以下代码中的list_val是一个列表列表,其中每个内部列表都使它存储的X,Y对具有相同的Y。

4)代码中的缩进行11向前不正确,但是粘贴时可能只是错误。

import csv
import numpy as np
with open('this_csv.csv') as csvfile:
    readCSV = csv.reader(csvfile,delimiter=',')
    integers=np.array([list(map(int,x)) for x in readCSV])
    print(integers)
    max_y = np.amax(integers, axis=0)[1]
    list_val=[]
    for i in range(max_y+1):
        this_list = []
        for element in integers:
            if element[1]==i:
                this_list.append(element)
        if len(this_list)>0:
            list_val.append(this_list)