首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R向量化函数的Pythonic替代

R向量化函数的Pythonic替代
EN

Stack Overflow用户
提问于 2016-01-06 22:10:47
回答 4查看 1K关注 0票数 5

我是用Python工作的,但来自R背景--如果我想要获取字符串x = ['1', '2', '3']数组并获得相应的整数数组[1, 2, 3],那么自然要做的事情是运行类似int(x)的东西。当然,这个语法不起作用,因为我使用Python,而且函数不会自动向量化。似乎我可以使用NumPy来创建一个矢量化的函数版本,但这感觉就像用非常重的R口音说Python。

遍历向量工作的内容

代码语言:javascript
复制
x2 = []
for y in x:
    x2.append(int(y))

但是看起来一点也不优雅--这是一个三行结构,我可以在R中用六个字符来完成,当然,有一种毕多尼式的方法可以做到这一点,更紧凑?或者,这是与Python与R的各自优势和弱点相结合的结果吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-01-06 22:12:56

您可以使用map

代码语言:javascript
复制
>>> lst = ['1', '2', '3']
>>> map(int, lst)
[1, 2, 3]

或一份清单的理解:

代码语言:javascript
复制
>>> [int(x) for x in lst]
[1, 2, 3]

用哪一种?主要是基于意见。就我个人而言,如果映射的函数已经作为内置函数存在,我更喜欢map

注意,在Python3中,map将生成一个map对象,如果您想要有一个列表,就必须显式地转换为list。因此,在Python3中可能更倾向于理解:

代码语言:javascript
复制
>>> result = map(int, ['1', '2', '3'])
>>> result
<map object at 0x7f35c4c3af98>
>>> list(result)
[1, 2, 3]
票数 5
EN

Stack Overflow用户

发布于 2016-01-06 22:12:50

您应该使用numpy库,并可能使用基于它的其他库,比如pandas。如果你想做的是矢量化的数值运算,这就是实现它的方法。

你是对的,在某种程度上,你遇到了这两种语言的优势和弱点。在R中,一切都是向量,甚至是单个数值。这使得向量化操作变得简单,但在不想要矢量化数值计算的地方做任何事情都会很尴尬。Python具有更大的灵活性,因为它不将诸如向量化之类的东西构建到核心语言类型中;您仍然可以这样做,但您需要一个库。

换句话说,R的优点是所有事物都是向量化的,缺点是所有东西都是向量化的;Python的一个优点是事物在默认情况下不是向量化的,缺点是在默认情况下不是向量化的。使用numpy执行向量化操作与其说是“带有R重音的Python”,不如说是“带有向量重音的Python”,如果您想要矢量化操作,这正是您想要的。如果你做了很多统计,你可能会发现R的优势很有帮助。根据我的经验,如果您做的几乎任何事情都不是统计数据,您会发现Python对各种任务的适应性要强得多。

票数 5
EN

Stack Overflow用户

发布于 2016-01-06 22:12:56

您可以使用列表理解:

代码语言:javascript
复制
x = ['1', '2', '3']
l = [int(i) for i in x]
print(l)
[1, 2, 3]

如果要使用复杂的向量、数据格式,则应该检查numpypandasscipy库。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34643792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档