首页 > 解决方案 > 使用 for 循环时加速 Python 中的 numpy 代码

问题描述

我一直在编写一小段代码,想知道是否有办法加快它的速度。我正在尝试将第二列中字符串的每个值与第三列中的每个值进行比较。换句话说,我将第一列中的“Z”值与第二列中的“Z”值进行比较。然后第一列中的“Z”值第二列中的“J2”值......对第一列中的所有字符串重复此操作。

大批:

array([['Z', 0.0, 0.0],
       ['J2', 1.0, 0.0],
       ['I8', 2.0, 3.0],
       ['K', 2.0, 27.0],
       ['B7', 0.0, 0.0]], dtype=object)

这是我最初使用的代码:

import numpy as np
Tlist = []
for i, x in enumerate(df4[:,0]):
  for j, v in enumerate(df4[:,0]):
    Tlist.append((x,v, df4[i][1], df4[j][2]))

期望的输出:

[('Z', 'Z', 0.0, 0.0),
 ('Z', 'J2', 0.0, 0.0),
 ('Z', 'I8', 0.0, 3.0),
 ('Z', 'K', 0.0, 27.0),
 ('Z', 'B7', 0.0, 0.0),
 ('J2', 'Z', 1.0, 0.0),
 ('J2', 'J2', 1.0, 0.0),
 ('J2', 'I8', 1.0, 3.0),
 ('J2', 'K', 1.0, 27.0),
 ('J2', 'B7', 1.0, 0.0),
 ('I8', 'Z', 2.0, 0.0),
 ('I8', 'J2', 2.0, 0.0),
 ('I8', 'I8', 2.0, 3.0),
 ('I8', 'K', 2.0, 27.0),
 ('I8', 'B7', 2.0, 0.0),
 ('K', 'Z', 2.0, 0.0),
 ('K', 'J2', 2.0, 0.0),
 ('K', 'I8', 2.0, 3.0),
 ('K', 'K', 2.0, 27.0),
 ('K', 'B7', 2.0, 0.0),
 ('B7', 'Z', 0.0, 0.0),
 ('B7', 'J2', 0.0, 0.0),
 ('B7', 'I8', 0.0, 3.0),
 ('B7', 'K', 0.0, 27.0),
 ('B7', 'B7', 0.0, 0.0)]

我尝试了以下方法:

 # this function assumes that len(df4) == 100
 def new_func():
   lst = []
   i = [k for k in range(0,len(df4))]
   x = [v for v in df4[:,0]]
   j = [i for i in range(0,100)]*100
   z = [i for i in df4[:,0]]*len(x*10)
   lst.append((x,z,df4[i][1], df4[j][2]))
  return lst

但是上面的代码没有给我想要的输出。任何想法都会有帮助。

标签: pythonnumpyloops

解决方案


推荐阅读