我需要一种更快的方式来存储和访问大约3GB的k:v
对.其中k
是string
或integer
并且v
是一个np.array()
,可以是不同的形状.有没有任何对象,比标准python dict在存储和访问这样的表时更快?例如,a pandas.DataFrame
?
到目前为止,我已经了解python dict是一个相当快速的哈希表实现,有什么比我的具体案例更好的?
考虑以下在iPython/Jupyter Notebook中运行的代码:
from pandas import *
%matplotlib inline
ys = [[0,1,2,3,4],[4,3,2,1,0]]
x_ax = [0,1,2,3,4]
for y_ax in ys:
ts = Series(y_ax,index=x_ax)
ts.plot(kind='bar', figsize=(15,5))
Run Code Online (Sandbox Code Playgroud)
我希望有2个单独的图作为输出,相反,我将两个系列合并在一个单独的图中.这是为什么?如何获得保持for
循环的两个单独的图?
我想并行化以下代码:
for row in df.iterrows():
idx = row[0]
k = row[1]['Chromosome']
start,end = row[1]['Bin'].split('-')
sequence = sequence_from_coordinates(k,1,start,end) #slow download form http
df.set_value(idx,'GC%',gc_content(sequence,percent=False,verbose=False))
df.set_value(idx,'G4 repeats', sum([len(list(i)) for i in g4_scanner(sequence)]))
df.set_value(idx,'max flexibility',max([item[1] for item in dna_flex(sequence,verbose=False)]))
Run Code Online (Sandbox Code Playgroud)
我试图使用,multiprocessing.Pool()
因为每行可以独立处理,但我无法弄清楚如何共享DataFrame.我也不确定这是与pandas进行并行化的最佳方法.有帮助吗?
Pandas df.describe()是一个非常有用的方法来概述你的df.但是,它按列描述,我希望对行进行概述.有没有办法让它在没有转置df的情况下"by_row"工作?
我正在寻找能够在字符串中找到最重复序列的算法(可能在Python中实现).对于REPETITIVE,我指的是在不中断的情况下反复重复的任何字符组合(串联重复).
我寻找的算法不一样的"寻找最常见的词"之一.实际上,重复块不需要是字符串中最常见的单词(substring).
例如:
s = 'asdfewfUBAUBAUBAUBAUBAasdkBAjnfBAenBAcs'
> f(s)
'UBAUBAUBAUBAUBA' #the "most common word" algo would return 'BA'
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不知道如何解决这个问题.非常欢迎任何帮助.
UPDATE
一个额外的例子来澄清我希望返回具有最多重复次数的序列,无论其基本构建块是什么.
g = 'some noisy spacer'
s = g + 'AB'*5 + g + '_ABCDEF'*2 + g + 'AB'*3
> f(s)
'ABABABABAB' #the one with the most repetitions, not the max len
Run Code Online (Sandbox Code Playgroud)
@rici的例子:
s = 'aaabcabc'
> f(s)
'abcabc'
s = 'ababcababc'
> f(s)
'ababcababc' #'abab' would also be a solution here
# since it is repeated …
Run Code Online (Sandbox Code Playgroud) 我试图使我的一些代码Python 2和3兼容.
目前,我与像功能挣扎range
/ xrange
等方法dict.items
/ dict.iteritems
.理想情况下,我希望我的代码能够在Python 3.x中使用前者,在Python 2.x中使用后者.
使用if
/ else
在我看来是实现这个的最简单的方法:
if py >= 3:
for item in array.items()
...
else:
for item in array.iteritems()
Run Code Online (Sandbox Code Playgroud)
但是,这样做会导致大量重复和丑陋的代码.有没有更好的方法只使用标准库?我可以在代码开头的某个地方说明总是使用range
/ dict.items
if py >= 3
和xrange
/ dict.iteritems
如果没有?
可以这样做吗?
if py < 3:
use xrange as range
Run Code Online (Sandbox Code Playgroud)
我环顾四周,我知道有几个库,比如六个未来化的库,用于解决这个问题.但是我正在使用只运行python 2.7的服务器,我不允许在其上安装任何额外的库.我有一些我想使用的python3代码,但我也想只维护一个版本的代码.
我有一个DataFrame,我想检查一列的任何值(v)是否满足x<=v<=y
.
equal = any(df['columnX'] == value) # No problems here
in_between = any(x <= df['columnX'] <= y) # ValueError :/
Run Code Online (Sandbox Code Playgroud)
我得到的错误是ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
但我any()
已经在使用了!
那么这里的问题是什么?为什么它适用==
但不适用x<=v<=y
?
我有一个由列表推导生成的序列如下:
var a_bigram_list = lc[a[i..i+2] | (i <- 0..<len(a)), string]
Run Code Online (Sandbox Code Playgroud)
现在,我想对它进行排序,但sort(a_bigram_list)
会导致以下编译错误
Error: type mismatch: got (seq[string])
but expected one of:
proc sort[A, B](t: OrderedTableRef[A, B]; cmp: proc (x, y: (A, B)): int)
proc sort[A, B](t: var OrderedTable[A, B]; cmp: proc (x, y: (A, B)): int)
proc sort[A](t: CountTableRef[A])
proc sort[A](t: var CountTable[A])
proc sort[T](a: var openArray[T]; cmp: proc (x, y: T): int; order = SortOrder.Ascending)
Run Code Online (Sandbox Code Playgroud)
有什么方法可以对序列进行排序吗?或者我需要将其转换为数组?如果是这样,有没有办法从lc获取数组?
我正在尝试使用PyPy运行Python(2.7)脚本,但是遇到以下错误:
TypeError: sys.getsizeof() is not implemented on PyPy.
A memory profiler using this function is most likely to give results
inconsistent with reality on PyPy. It would be possible to have
sys.getsizeof() return a number (with enough work), but that may or
may not represent how much memory the object uses. It doesn't even
make really sense to ask how much *one* object uses, in isolation
with the rest of the system. For example, instances have maps,
which are often …
Run Code Online (Sandbox Code Playgroud) 在我看来,将经典的while循环与Assignment-expressions -loops互换可以使代码看起来很棒不是那么简单。
考虑example1
:
>>> a = 0
>>> while (a := a+1) < 10:
... print(a)
...
1
2
3
4
5
6
7
8
9
Run Code Online (Sandbox Code Playgroud)
和example2
:
>>> a = 0
>>> while a < 10:
... print(a)
... a += 1
...
0
1
2
3
4
5
6
7
8
9
Run Code Online (Sandbox Code Playgroud)
您将如何修改example1
以具有相同的输出(不跳过0
)example2
?(a = 0
当然,无需更改)
python ×9
pandas ×4
python-3.x ×3
any ×1
dictionary ×1
matplotlib ×1
nim-lang ×1
numpy ×1
parsing ×1
plot ×1
pypy ×1
python-2.7 ×1
python-3.8 ×1
python-assignment-expression ×1
sequence ×1
sizeof ×1
sorting ×1