np.vectorize在二维numpy数组上作为输入失败

时间:2019-07-16 09:56:16

标签: python numpy vectorization

我试图向量化一个以numpy数组作为输入的函数。我有一个二维numpy数组(形状为1000,100),该函数将应用于1000行中的每行。我尝试使用np.vectorize对函数进行向量化。这是代码:

def fun(i):
    print(i)
    location = geocoder.google([i[1], i[0]], method="reverse")
    #print type(location)
    location = str(location)
    location = location.split("Reverse")
    if len(location) > 1:
        location1 = location[1]
    return [i[0], i[1], location1]

#using np.vectorize
vec_fun = np.vectorize(fun)

哪个会引发错误

<ipython-input-19-1ee9482c6161> in fun(i)
      1 def fun(i):
      2     print(i)
----> 3     location = geocoder.google([i[1], i[0]], method="reverse")
      4     #print type(location)
      5     location = lstr(location)

IndexError: invalid index to scalar variable.

我已经打印了传递给乐趣的参数,该参数打印一个值(向量的第一个元素)而不是向量(1行),这是索引错误的原因,但是我没有得到任何想法如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

vectorize在数组的每个元素上运行函数,因此不是正确的选择。请改用常规循环:

for row in some_array:
    i0, i1, loc = fun(row)

由您决定要如何处理输出。请记住,如果location1,您的函数不会分配len(location) <= 1,在这种情况下会引发错误。它还会在第三个输出中返回字符串而不是数字值。

修复了这些问题后,如果要对输出进行排列:

output = np.empty((some_array.shape[0], 3))
for i, row in enumerate(some_array):
    output[i, :] = fun(row)