有没有类似于R中expand.grid()函数的Python函数?提前谢谢。
(编辑)下面是此R函数的说明和示例。
Create a Data Frame from All Combinations of Factors
Description:
Create a data frame from all combinations of the supplied vectors
or factors.
> x <- 1:3
> y <- 1:3
> expand.grid(x,y)
Var1 Var2
1 1 1
2 2 1
3 3 1
4 1 2
5 2 2
6 3 2
7 1 3
8 2 3
9 3 3
下面是rpy包的示例。我想得到相同的输出对象,但不使用R:
>>> from rpy import *
>>> a = [1,2,3]
>>> b = [5,7,9]
>>> r.assign("a",a)
[1, 2, 3]
>>> r.assign("b",b)
[5, 7, 9]
>>> r("expand.grid(a,b)")
{'Var1': [1, 2, 3, 1, 2, 3, 1, 2, 3], 'Var2': [5, 5, 5, 7, 7, 7, 9, 9, 9]}
编辑02/09/2012:我真的迷路了Python。列夫·列维斯基在回答中给出的代码对我不起作用:
>>> a = [1,2,3]
>>> b = [5,7,9]
>>> expandgrid(a, b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in expandgrid
NameError: global name 'itertools' is not defined
但是,似乎已安装itertools模块(从itertools导入中键入*
不会返回任何错误消息)
下面是一个示例,它提供了与您需要的类似的输出:
import itertools
def expandgrid(*itrs):
product = list(itertools.product(*itrs))
return {'Var{}'.format(i+1):[x[i] for x in product] for i in range(len(itrs))}
>>> a = [1,2,3]
>>> b = [5,7,9]
>>> expandgrid(a, b)
{'Var1': [1, 1, 1, 2, 2, 2, 3, 3, 3], 'Var2': [5, 7, 9, 5, 7, 9, 5, 7, 9]}
这种差异与这样一个事实有关,即在itertools.product
中,最右边的元素在每次迭代中都会前进。如果重要,您可以通过巧妙地排序产品
列表来调整函数。
itertools
中的product
是解决方案的关键。它产生输入的笛卡尔乘积。
from itertools import product
def expand_grid(dictionary):
return pd.DataFrame([row for row in product(*dictionary.values())],
columns=dictionary.keys())
dictionary = {'color': ['red', 'green', 'blue'],
'vehicle': ['car', 'van', 'truck'],
'cylinders': [6, 8]}
>>> expand_grid(dictionary)
color cylinders vehicle
0 red 6 car
1 red 6 van
2 red 6 truck
3 red 8 car
4 red 8 van
5 red 8 truck
6 green 6 car
7 green 6 van
8 green 6 truck
9 green 8 car
10 green 8 van
11 green 8 truck
12 blue 6 car
13 blue 6 van
14 blue 6 truck
15 blue 8 car
16 blue 8 van
17 blue 8 truck
仅使用列表理解:
>>> [(x, y) for x in range(5) for y in range(5)]
[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (1, 0), (1, 1), (1, 2), (1, 3), (1, 4), (2, 0), (2, 1), (2, 2), (2, 3), (2, 4), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4), (4, 0), (4, 1), (4, 2), (4, 3), (4, 4)]
如果需要,转换为numpy数组:
>>> import numpy as np
>>> x = np.array([(x, y) for x in range(5) for y in range(5)])
>>> x.shape
(25, 2)
我已经测试了10000 x 10000,python的性能与R中的expand.grid相当。在理解中使用元组(x,y)比使用列表[x,y]快约40%。
使用np.meshgrid大约快3倍,内存占用更少。
%timeit np.array(np.meshgrid(range(10000), range(10000))).reshape(2, 100000000).T
1 loops, best of 3: 736 ms per loop
在R中:
> system.time(expand.grid(1:10000, 1:10000))
user system elapsed
1.991 0.416 2.424
请记住,R是基于1的数组,而Python是基于0的。
问题内容: 功能是什么?是用户界面吗?我们什么时候使用它? 问题答案: 它提出了一个提示给用户(可选的),从用户获得输入,并通过在一个字符串的用户返回数据的输入。请参阅有关的文档。 例: 这与 后者的不同之处在于后者试图解释用户给出的输入。通常最好避免并坚持使用自定义的解析/转换代码。 注意:这适用于Python 2.x
函数是具有某种特定功能的代码块,可以重复使用。在前面的学习中你已经认识到了很多 Python 的内置函数。这节课我们就来创建我们自己的函数: 1. 重复性的代码 1.1 什么是重复性的代码 在处理功能相似的逻辑时,会出现结构雷同的代码,例如:有两个列表,编写程序分别打印这两个列表,代码如下: 案例演示 预览 复制 复制成功! a = [1, 2, 3] b = [10, 20, 30] # 打印
有没有可能创建一个函数,它将lambda函数作为参数(每个lambda函数使用参数),然后返回一个具有单个参数的新函数,并返回所有lambda函数的乘积? 以下是我的非工作示例: 所以本质上,你有一个函数,它需要4个lambda函数,每个函数使用参数。例如,的参数可以类似于。 然后返回一个名为的新函数,该函数的输出是所有lambda函数的乘积,并且有一个参数,该参数传递到的每个lambda函数的参
问题内容: 在Codewars.com上,我遇到了以下任务: 创建一个函数,该函数在连续调用时将数字加在一起。所以应该返回,应该返回,… 虽然我熟悉Python的基础知识,但从未遇到过可以连续调用的函数,即可以称为的函数。到目前为止,我什至不确定如何解释这种表示法。 作为一个数学家,我怀疑是分配到每个功能的函数,然后返回,同样也。 如果这种解释是正确的,Python将允许我动态创建对我来说非常有趣
本文向大家介绍Python中的匿名函数,包括了Python中的匿名函数的使用技巧和注意事项,需要的朋友参考一下 这些函数被称为匿名函数,因为它们不是通过使用def关键字以标准方式声明的。您可以使用lambda关键字创建小的匿名函数。 Lambda形式可以接受任意数量的参数,但仅以表达式形式返回一个值。它们不能包含命令或多个表达式。 匿名函数不能直接调用print,因为lambda需要一个表达式 L
问题内容: 是否有Python函数类似于R中的expand.grid()函数?提前致谢。 (编辑)以下是此R函数的说明和示例。 (EDIT2)下面是rpy包的示例。我想获得相同的输出对象,但不使用R: 编辑02/09/2012: 我真的 迷上 了Python。Lev Levitsky在他的答案中给出的代码对我不起作用: 但是,似乎已安装itertools模块(键入不会返回任何错误消息) 问题答案:
问题内容: 在以下Python代码中,我得到了。据我了解,局部函数共享包含函数的局部变量,但是在这里似乎并非如此。我认识到在这种情况下这是一个不变的价值,但这应该不是问题。 似乎内部函数已收到父函数中所有引用的副本,因为如果的值包装在可变类型中,则不会收到异常。 有人可以在这里澄清行为,并为此指出合适的Python文档吗? 问题答案: 我相信您将其视为“可变性”问题是正确的。尽管您发布的代码确实引
我刚刚发现了Python3的函数注释(https://www.python.org/dev/peps/pep-3107/)这对于记录参数或返回类型似乎很有用。它还可以在我的pycharm IDE中提供更好的intellisense。 我有一个关于输入类型模糊的参数的问题。例如,它可以是一个列表或numpy数组或一些“类似数组”的数量。为函数注释此类输入参数的最佳方法是什么?例子: 我还有一个例子,