我有一张data.table
约250万行的表.有两列.我想删除两列中重复的任何行.以前对于data.frame,我会这样做:
data.table
但这不适用于data.table.我试过df -> unique(df[,c('V1', 'V2')])
但它似乎仍然只在data.table的键上操作而不是整行.
有什么建议?
干杯,戴维
例
>dt
V1 V2
[1,] A B
[2,] A C
[3,] A D
[4,] A B
[5,] B A
[6,] C D
[7,] C D
[8,] E F
[9,] G G
[10,] A B
Run Code Online (Sandbox Code Playgroud)
在上面的data.table中unique(df[,c(V1,V2), with=FALSE])
,表键是哪里,只删除行4,7和10.
> dput(dt)
structure(list(V1 = c("B", "A", "A", "A", "A", "A", "C", "C",
"E", "G"), V2 = c("A", "B", "B", "B", "C", "D", "D", "D", "F",
"G")), .Names = c("V1", "V2"), …
Run Code Online (Sandbox Code Playgroud) 我有一些问题连接到我用docker-compose启动的mysql docker容器.这是一篇很长的帖子(对不起!).
这是我的docker-compose.yml文件:
db:
image: mysql:5.7
ports:
- "3306:3306" # I have tried both ports and expose "3306". Still doesn't work
environment:
- MYSQL_ROOT_PASSWORD="secret"
- MYSQL_USER="django"
- MYSQL_PASSWORD="secret"
- MYSQL_DATABASE="myAppDB"
Run Code Online (Sandbox Code Playgroud)
然后:
$> docker-compose build
db uses an image, skipping #expected!
$> docker-compose up
<<LOTS OF OUTPUT>>
Run Code Online (Sandbox Code Playgroud)
好的,现在我有一个正在运行的docker容器运行器mysql:5.7.大!或者是吗?在我的django应用程序中进行测试时,我收到操作错误,表示不允许用户连接数据库.好的,那也许是我的django呢?
$> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7216f99ca0f mysql:5.7 "docker-entrypoint.sh" 3 minutes ago Up 3 minutes 0.0.0.0:3306->3306/tcp sharpfin_db_1
$> docker-machine ip dev
192.168.99.100
$> mysql -h 192.168.99.100 -P 3306 …
Run Code Online (Sandbox Code Playgroud) 我已经计算出一个测试统计量,该统计量被分配为具有1个自由度的卡方,并且想要找出与使用python相对应的P值.
我是一个python和数学/统计新手所以我认为我想要的是来自SciPy的chi2分布的概率denisty函数.但是,当我这样使用时:
from scipy import stats
stats.chi2.pdf(3.84 , 1)
0.029846
Run Code Online (Sandbox Code Playgroud)
然而,一些谷歌搜索和一些知道数学而不是python的同事交谈说它应该是0.05.
有任何想法吗?干杯,戴维
我有一个像这样的数据框架
> df
a b c d
1 1 2 A 1001
2 2 4 B 1002
3 3 6 B 1002
4 4 8 C 1003
5 5 10 D 1004
6 6 12 D 1004
7 7 13 E 1005
8 8 14 E 1006
Run Code Online (Sandbox Code Playgroud)
我想删除列c和列d中有重复值的行.因此,在此示例中,行2,3,5和6将被删除.
我用过这个,有效:
df[!(df$c %in% df$c[duplicated(df$c)] & df$d %in% df$d[duplicated(df$d)]),]
>df
a b c d
1 1 2 A 1001
4 4 8 C 1003
7 7 13 E 1005
8 8 14 E …
Run Code Online (Sandbox Code Playgroud) 我试图缩放矩阵中的值,以便每列加起来一个.我试过了:
m = matrix(c(1:9),nrow=3, ncol=3, byrow=T)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
colSums(m)
12 15 18
m = m/colSums(m)
[,1] [,2] [,3]
[1,] 0.08333333 0.1666667 0.25
[2,] 0.26666667 0.3333333 0.40
[3,] 0.38888889 0.4444444 0.50
colSums(m)
[1] 0.7388889 0.9444444 1.1500000
Run Code Online (Sandbox Code Playgroud)
显然这不起作用.然后我尝试了这个:
m = m/matrix(rep(colSums(m),3), nrow=3, ncol=3, byrow=T)
[,1] [,2] [,3]
[1,] 0.08333333 0.1333333 0.1666667
[2,] 0.33333333 0.3333333 0.3333333
[3,] 0.58333333 0.5333333 0.5000000
m = colSums(m)
[1] 1 1 1
Run Code Online (Sandbox Code Playgroud)
这样可行,但感觉我在这里遗漏了一些东西.这不是常规方式.我确定我在这里很傻.任何你能提供的帮助都会受到赞赏,干杯,戴维
我有一本字典d1
和一份清单l1
.
字典键是字符串,值是我自己定义的对象.如果它有帮助,我可以更详细地描述对象,但是现在,对象具有列表属性names
,并且name
可能会或可能不会出现一些元素l1
.
我想要做的是扔掉字典中的任何元素d1
,其中name
所述元素中的对象的属性不包含任何出现的元素l1
.
作为一个简单的例子:
l1 = ['cat', 'dog', 'mouse', 'horse', 'elephant',
'zebra', 'lion', 'snake', 'fly']
d1 = {'1':['dog', 'mouse', 'horse','orange', 'lemon'],
'2':['apple', 'pear','cat', 'mouse', 'horse'],
'3':['kiwi', 'lime','cat', 'dog', 'mouse'],
'4':['carrot','potato','cat', 'dog', 'horse'],
'5':['chair', 'table', 'knife']}
Run Code Online (Sandbox Code Playgroud)
所以造成词典将或多或少相同,但每个列表的元素将是关键-值对来自1
于4
不包括水果和蔬菜,将不包含5键值面值为无值出现在家具l1
.
为此,我使用了嵌套列表/字典理解,如下所示:
d2 = {k: [a for a in l1 if a in d1[k]] for k in d1.keys()}
print(d2)
>>>>{'1': ['dog', 'mouse', 'horse'], …
Run Code Online (Sandbox Code Playgroud) 首先我知道在SO上有许多类似的主题问题,但经过一天的搜索,阅读和测试后,我找不到解决方案.
我有一个python函数,它计算numpy ndarray(mxn)的成对相关性.我原本只是在numpy中做这个,但函数也计算了倒数对(即计算矩阵的行A和B之间的相关性,它也计算了行B和A之间的相关性.)所以我拿了一个稍微不同的方法,对于大m的矩阵来说大约快两倍(我的问题的实际大小是m~8000).
这很好,但仍然有点慢,因为会有很多这样的矩阵,并且要做这些都需要很长时间.所以我开始研究cython作为一种加快速度的方法.我从我读到的内容中了解到,cython并不会真正加速numpy.这是真的吗,还是我缺少的东西?
我认为下面的瓶颈是np.sqrt
,np.dot
调用ndarray的.T
方法和np.absolute
.我见过的人使用sqrt
从libc.math
更换np.sqrt,所以我想我的第一个问题是,类似的功能在其他的方法libc.math
,我可以使用?我担心我完全和完全不熟悉C/C++/C#或任何C系列语言,因此这种打字和cython业务对我来说是一个非常新的领域,如果原因/解决方案显而易见,请道歉.
如果不这样做,关于我能做些什么才能获得一些性能提升的想法?
下面是我的pyx代码,设置代码和对pyx函数的调用.我不知道它是否重要,但是当我打电话python setup build_ext --inplace
它有效但有很多警告我并不理解.这些也可能是我没有看到提速的原因吗?
任何帮助都非常感谢,并为超长的帖子感到抱歉.
setup.py
from distutils.core import setup
from distutils.extension import Extension
import numpy
from Cython.Distutils import build_ext
setup(
cmdclass = {'build_ext': build_ext},
ext_modules = [Extension("calcBrownCombinedP",
["calcBrownCombinedP.pyx"],
include_dirs=[numpy.get_include()])]
)
Run Code Online (Sandbox Code Playgroud)
和设置的输出:
>python setup.py build_ext --inplace
running build_ext
cythoning calcBrownCombinedP.pyx to calcBrownCombinedP.c
building 'calcBrownCombinedP' extension
C:\Anaconda\Scripts\gcc.bat -DMS_WIN64 -mdll -O -Wall -IC:\Anaconda\lib\site-packages\numpy\core\include -IC:\Anaconda\include -IC:\Anaconda\PC -c calcBrownCombinedP.c -o build\temp.win-amd64-2.7\Release\calcbrowncombinedp.o
In …
Run Code Online (Sandbox Code Playgroud) 我有一个名为例如三个变量R A数据帧df$V1
,df$V2
,df$V3
.
df$V1
并且df$V2
都是因素,而df$V3
数字.
df <- data.frame(
V1 = letters[1:4],
V2 = rep(LETTERS[1:3], each = 4),
V3 = 1:12
)
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方式来创建一个包含值的表df$V3
,以df$V1
作为行,df$V2
作为列.
我尝试过桌子上的变化,但没有到达任何地方.也许有人可以提供帮助,先谢谢,戴维.
我有两个文件,一个文件是我的数据,另一个文件是我要从我的数据文件中提取的行号列表.我可以使用awk读取我的行文件,然后提取与行号匹配的行吗?
示例:数据文件:
This is the first line of my data
This is the second line of my data
This is the third line of my data
This is the fourth line of my data
This is the fifth line of my data
Run Code Online (Sandbox Code Playgroud)
行号文件
1
4
5
Run Code Online (Sandbox Code Playgroud)
输出:
This is the first line of my data
This is the fourth line of my data
This is the fifth line of my data
Run Code Online (Sandbox Code Playgroud)
我只使用命令行awk和sed来实现非常简单的东西.这是超出我的方式,我一直在谷歌搜索一个小时没有答案.
我一直在努力克服对 Cython 的恐惧(恐惧是因为我对 c 或 c++ 一无所知)
我有一个函数,它接受 2 个参数,一个集合(我们称之为testSet
)和一个集合列表(我们称之为targetSets
)。然后该函数迭代targetSets
,并计算与 的交集长度testSet
,将该值添加到列表中,然后返回该列表。
现在,这本身并没有那么慢,但问题是我需要对 testSet 进行模拟(数量很大,约 10,000 个),而 targetSet 大约有 10,000 个集长。
因此,对于要测试的少量模拟,纯 Python 实现大约需要 50 秒。
我尝试制作一个 cython 函数,它成功了,现在运行时间约为 16 秒。
如果我可以对任何人都能想到的 cython 函数做任何其他事情,那就太好了(python 2.7 btw)
这是我在重叠Func.pyx中的 Cython 实现
def computeOverlap(set testSet, list targetSets):
cdef list obsOverlaps = []
cdef int i, N
cdef set overlap
N = len(targetSets)
for i in range(N):
overlap = testSet & targetSets[i]
if len(overlap) <= 1: …
Run Code Online (Sandbox Code Playgroud) r ×4
python ×3
cython ×2
optimization ×2
awk ×1
chi-squared ×1
data.table ×1
dataframe ×1
dictionary ×1
docker ×1
duplicates ×1
line ×1
list ×1
mysql ×1
numpy ×1
python-2.7 ×1
scipy ×1
statistics ×1