从这个线程中我们可以看到,如何将列表解析中的多个返回值解包为元组。
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)
答案 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
然而,正如其他答案所提出的那样,直接使用数组的方法可能更具可读性,而且速度也更快。