所以基本上我的问题与'zip'(或izip)有关,而这个问题之前被问过......
有没有更好的方法来迭代两个列表,每次迭代从每个列表中获取一个元素?
如果我有两个变量 - 它们要么是长度为 n 的一维数组,要么是单个值,我如何循环遍历它们以便返回 n 个值。
'zip' kindof 做我想做的事——除了当我传入一个值和一个数组时它会抱怨。
我在下面有一个我的目标示例 - 基本上我有一个 ac 函数,它比 python 进行更有效的计算。我希望它像一些 numpy 函数一样工作 - 可以处理数组和标量的混合,所以我为它编写了一个 python 包装器。但是 - 就像我说的“zip”失败了。我想原则上我可以对 input 进行一些测试,并为标量和数组的每个变体编写不同的语句 - 但似乎 python 应该有更聪明的东西.... ;) 有什么建议吗?
"""
Example of zip problems.
"""
import numpy as np
import time
def cfun(a, b) :
"""
Pretending to be c function which doesn't deal with arrays
"""
if not np.isscalar(a) or not np.isscalar(b) :
raise Exception('c is freaking out')
else :
return a+b
def pyfun(a, b) :
"""
Python Wrappper - to deal with arrays input
"""
if not np.isscalar(a) or not np.isscalar(b) :
return np.array([cfun(a_i,b_i) for a_i, b_i in zip(a,b)])
else :
return cfun(a, b)
return cfun(a,b)
a = np.array([1,2])
b= np.array([1,2])
print pyfun(a, b)
a = [1,2]
b = 1
print pyfun(a, b)
编辑 :
非常感谢大家的建议。认为我必须为 np.braodcast 寻求解决方案 - 因为从我的角度来看,它似乎是最简单的.....