3 回答
TA贡献2011条经验 获得超2个赞
您是对的:默认情况下,Python 操作不是矢量化的。在这方面,R比常规 Python更接近于 3rd 方Pandas的 API 。所以你可以使用 Pandas 系列对象:
import pandas as pd
x = pd.Series([1, 2, 3, 4])
y = pd.Series([2, 4, 6, 8])
res = x[x.isin(y)]
print(res) # output Pandas series
# 1 2
# 3 4
# dtype: int64
print(res.values) # output NumPy array representation
# array([2, 4], dtype=int64)
Pandas 建立在NumPy 之上,所以你可以在 NumPy 中做同样的事情也就不足为奇了:
import numpy as np
x = np.array([1, 2, 3, 4])
y = np.array([2, 4, 6, 8])
res = x[np.isin(x, y)]
print(res)
# array([2, 4])
TA贡献1804条经验 获得超7个赞
您可以通过定义自定义getitem () 方法来创建具有您想要的行为的MyList类型
from collections import UserList, Iterable
class MyList(UserList):
def __getitem__(self, item):
if isinstance(item, Iterable):
return MyList(x for x in self.data if x in item)
return super(MyList, self).__getitem__(item)
if __name__ == '__main__':
l = MyList([1, 2, 3, 4, 5])
v = l[[2, 3, 11]]
print(v) # [2, 3]
TA贡献1780条经验 获得超5个赞
这是使用 .isin() 方法的示例,相当于 R 的 %in%。
>> x = pd.Series([1,2,3,4,5])
>> y = pd.Series([1,3,5,6])
>> x[x.isin(y)]
0 1
2 3
4 5
添加回答
举报