Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中根据向量/矩阵中的每个元素检查值_Python_Loops_Matrix_Iteration_Vectorization - Fatal编程技术网

如何在Python中根据向量/矩阵中的每个元素检查值

如何在Python中根据向量/矩阵中的每个元素检查值,python,loops,matrix,iteration,vectorization,Python,Loops,Matrix,Iteration,Vectorization,这当然很简单,但现在我已经试着想了几个小时了。 我想对照10x1矩阵中的所有值检查一个值,如果它大于其中任何一个值,则应将其插入大于的元素之前 到目前为止,我已经尝试了以下代码的不同变体,但没有成功。 我得到的是如下所示: [[ 157.] [ 3.] [ 6.] [ 6.] [ 5.] [ 9.] [ 0.] [ 0.] [ 0.] [ 0.]] 我所尝试的: col,col1,col2 = np.zeros((10,1)),np.zer

这当然很简单,但现在我已经试着想了几个小时了。 我想对照10x1矩阵中的所有值检查一个值,如果它大于其中任何一个值,则应将其插入大于的元素之前

到目前为止,我已经尝试了以下代码的不同变体,但没有成功。 我得到的是如下所示:

[[ 157.]
 [   3.]
 [   6.]
 [   6.]
 [   5.]
 [   9.]
 [   0.]
 [   0.]
 [   0.]
 [   0.]]
我所尝试的:

col,col1,col2 = np.zeros((10,1)),np.zeros((10,1)),np.zeros((10,1))

for element in col:             
    if (aggdelay>element):                  
        col[n,0] = aggdelay
        col1[n,0] = flight_num
        col2[n,0] = airline_id
        break               

    n +=1
    if (n>10):
        n=0
我得到的输出如下所示:

[[ 157.]
 [   3.]
 [   6.]
 [   6.]
 [   5.]
 [   9.]
 [   0.]
 [   0.]
 [   0.]
 [   0.]]
输入为:

 19790  1256    124.0
19790   1257    157.0
19790   1258    3.0
19790   1264    6.0
19790   1266    6.0
19790   1280    5.0
19790   1282    9.0
预期产出将是:

19790   1258    3.0
19790   1280    5.0
19790   1264    6.0
19790   1266    6.0
19790   1282    9.0
19790   1256    124.0
19790   1257    157.0
我实现了David提供的解决方案,但我发现很难用新元素更新“矩阵”。 这是我目前的解决方案,但我怀疑它没有正确更新

 #!/usr/bin/python
import sys
import collections
import numpy as np
from operator import itemgetter

result =np.zeros((3,1))
col,col1,col2 = []*10,[]*10,[]*10
col11,col12,col23 = [],[],[]
old_flight_num, old_airline_id = None, None

lines = sys.stdin.readlines()
sumDelay1, num = 0, 1
n = 0
for line in lines:

    line, line = line.strip(), line.split("\t")

    if len(line) !=3:
        continue

    airline_id, flight_num, aggdelay = line

    try:
        aggdelay = float(aggdelay)
        flight_num= int(flight_num)
        airline_id = int(airline_id)
    except ValueError:
        continue

    if (old_airline_id is not None) and (old_airline_id != airline_id):

        res2.sort(key=itemgetter(2))

        print('                                                      ')     
        print('Here come the results for airline ID: ', (old_airline_id))
        print('                                                      ')
        for row in res2:
            print(row)      

        col,col1,col2 = []*10,[]*10,[]*10

        n=0

    if (n<10):
        col.append(airline_id),col1.append(flight_num),col2.append(aggdelay)

    else:   
        res = zip(col,col1,col2)
        res.sort(key=itemgetter(2))

        if (aggdelay>min(col2)):
            res.remove(res[0])
            col11.append(airline_id), col12.append(flight_num), col23.append(aggdelay)
            res1 = zip(col11,col12,col23)
            res2=res+res1

            res2.sort(key=itemgetter(2))
    col11,col12,col23 = [],[],[]    
    n += 1

    old_airline_id = airline_id

if (old_airline_id is not None):

    res2.sort(key=itemgetter(2))
    print('                                                      ')     
    print('Here come the results for airline ID: ', (old_airline_id))
    print('                                                      ')
    for row in res2:
        print(row)
#/usr/bin/python
导入系统
导入集合
将numpy作为np导入
从运算符导入itemgetter
结果=np.零((3,1))
列,列1,列2=[]*10,[]*10,[]*10
col11、col12、col23=[]、[]、[]
旧航班号,旧航空公司id=无,无
lines=sys.stdin.readlines()
sumDelay1,num=0,1
n=0
对于行中的行:
line,line=line.strip(),line.split(“\t”)
如果连(线)=三:
持续
航空公司id,航班号,总延误=线路
尝试:
aggdelay=浮动(aggdelay)
航班号=整数(航班号)
航空公司id=int(航空公司id)
除值错误外:
持续
如果(old_airline_id不是None)和(old_airline_id!=airline_id):
res2.sort(key=itemgetter(2))
打印(“”)
打印('这是航空公司ID的结果:',(旧航空公司ID))
打印(“”)
对于res2中的行:
打印(行)
列,列1,列2=[]*10,[]*10,[]*10
n=0
如果(nmin(col2)):
res.remove(res[0])
col11.append(航空公司id)、col12.append(航班号)、col23.append(累计延迟)
res1=zip(col11、col12、col23)
res2=res+res1
res2.sort(key=itemgetter(2))
col11、col12、col23=[]、[]、[]
n+=1
旧航空公司识别号=航空公司识别号
如果(旧航空公司id不是无):
res2.sort(key=itemgetter(2))
打印(“”)
打印('这是航空公司ID的结果:',(旧航空公司ID))
打印(“”)
对于res2中的行:
打印(行)
我非常希望能在这方面得到一些指导。
谢谢大家!

这可能会奏效,但我不得不猜测您对输出的预期以及您如何处理输入(假设以航空公司ID、航班号、延迟3列给出)

这将为您提供一个包含3列的
ndarray
对象,第一列是您的“延迟”,然后是航班号,然后是航空公司id,并按第一列排序

如果您只对top-N感兴趣,那么只需使用上面的方法构建整个矩阵并对其进行切片:

# return the top 10, or however many:
matrix = matrix[:10]
不使用
list.sort
方法和切片,您可以按相反顺序对
ndarray
对象进行排序:

m = zip(agg_delays,flight_nums,ids)
matrix = np.array(m, np.float32)
matrix.sort(0)
# return the top 10, or however many:
matrix = matrix[::-1][:10]

什么是“矩阵”?(Python中没有这样的数据类型。)请显示您的代码:)您的问题表明您有一些代码,但可能错误地没有实际包含您的代码。您打算只在第一个实例中插入,还是在
val>元素的所有实例中插入?
?年,我只需要更改操作系统。我希望我的编辑能胜任大卫的工作。如果我需要详细解释,请告诉我。正如您可能看到的,第三列中的每个数字在第一列和第二列中都有一个归属值。它们还应与存储的值放在同一索引中。我只是觉得在三个向量中进行比较容易,然后在最后合并它们。@DYZ By matrix我指的是一个多维numpy数组,这更令人满意吗?你尝试过这个函数吗?谢谢你在我缺乏信息的情况下尝试它。在我看来,如果我有关于航空公司id、航班号和延误的固定数量的信息,你的答案就行了。情况是我有更多的数据,而提供的数据只是我数据的一个子集。我需要评估每一行,其中包含航空公司id、航班号和航班延误,并根据延误的大小将其放入矩阵中,这样我的数据与相应的航空公司id和航班号的前10个延误就结束了。我希望这能进一步澄清问题。使用此方法构建整个矩阵,然后只需从你感兴趣的前10个(或多个)项目中分一杯羹。非常感谢你的意见,大卫!当我尝试压缩这三个变量时,我会得到以下错误:“压缩参数#3必须支持迭代”我如何处理这个错误消息?延迟是一个浮点数。在我的示例中,我假设您首先将所有数据收集到列表或其他序列对象中。然后你可以拉上拉链。