python list comprehension for multiple return function to numpy array

时间:2017-11-18 11:19:48

标签: python list numpy tuples

从这个线程中我们可以看到,如何将列表解析中的多个返回值解包为元组。

def f(x):
  return 2*x, x*x

x = range(1, 4)
xlist, ylist = zip(*[f(value) for value in x])

有没有办法直接进入numpy阵列?或者是唯一的解决方案:

xlist = np.asarray(xlist)

3 个答案:

答案 0 :(得分:2)

要使用numpy.array执行此操作,只需将参数作为数组本身传递即可。函数中的操作通过数组参数进行映射,并返回两个数组的元组:

>>> xlist, ylist = f(np.asarray(x))
>>> xlist
array([2, 4, 6])
>>> ylist
array([1, 4, 9])

答案 1 :(得分:1)

无需zip或列表推导。您也无需更改f功能:

>>> import numpy as np
>>> x = np.arange(1, 4)
>>> array1, array2 = f(x)
>>> array1
array([2, 4, 6])
>>> array2
array([1, 4, 9])

如果x是一个数组,2 * x表示x的每个元素都会乘以2

>>> 2 * x
array([2, 4, 6])

答案 2 :(得分:1)

您可以使用:

xlist,ylist = np.fromiter(
        itertools.chain.from_iterable(f(value) for value in x),
        dtype=np.int_,
        count=len(x)*2
    ).reshape((-1,2)).T

xlist,ylist = np.array([f(value) for value in x]).T

然而,正如其他答案所提出的那样,直接使用数组的方法可能更具可读性,而且速度也更快。