草庐IT

python - 为什么读取整个 hdf5 数据集比读取切片更快

我想弄清楚为什么会这样:In[1]:importtime,h5pyash5In[2]:f=h5.File('myfile.hdf5','r')In[3]:st=time.time();data=f["data"].value[0,:,1,...];elapsed=time.time()-st;In[4]:elapsedOut[4]:11.127676010131836In[5]:st=time.time();data=f["data"][0,:,1,...];elapsed2=time.time()-st;In[6]:elapsed2Out[6]:59.810582399368286I

python - 如何使用 tensorflow 有效地提取给定长度的所有切片

我正在尝试沿2维张量的第0轴提取所有长度为4的切片。到目前为止,我可以将纯Python与tensorflow混合使用。r=test.shape[0]#testshouldbeatensorn=4a_list=list(range(r))the_list=np.array([a_list[slice(i,i+n)]foriinrange(r-n+1)])test_stacked=tf.stack(tf.gather(test,the_list))在不使用纯Python的情况下,有什么有效的方法可以做到这一点?请注意,“测试”数组实际上应该是一个张量,因此在我执行图表的第一部分之前它的形状

python - numpy 中 3D 数组的 2D 切片系列

我有一个表示笛卡尔空间密度值的3D数组。要获得二维图像,我只需使用sum(array,2)对其中一个轴求和,然后使用matplotlib函数imshow(array2D)获取二维图像。我想做的是使用imshow()一次只显示3D数组的一个切片,这样我就可以“翻页”3D数组以查看图像的不同点.切片命令很简单:array[:,:,x]但我看不出有什么办法至少一次显示每个切片。除了每次手动更改程序文件之外,还有其他建议吗?这可以以某种方式交互完成吗? 最佳答案 我实际上写了代码来做我认为你正在寻找的东西,看看这是否有帮助:importnu

python - 使用字符串匹配慢来切片 Pandas 行

我基本上想学习一种基于正则表达式的条件切片来更快地切片Pandas数据帧的方法。例如下面的df(string_column有4个以上的变体,它们仅用于说明目的):index,string_col1,string_col2,value0,'apple','this',101,'pen','is',1232,'pineapple','sparta',203,'penpineappleapplepen','this',2344,'apple','is',2125,'pen','sparta',506,'pineapple','this',697,'penpineappleapplepen',

python - 为什么 .loc 对切片具有包容性行为?

出于某种原因,以下2次调用iloc/loc会产生不同的行为:>>>importpandasaspd>>>df=pd.DataFrame(dict(A=range(3),B=range(3)))>>>df.iloc[:1]AB000>>>df.loc[:1]AB000111我知道loc考虑行标签,而iloc考虑行的基于整数的索引。但为什么loc调用的上限被认为是包容性的,而iloc的上限被认为是排他性的? 最佳答案 快速回答:在使用标签时进行端包含切片通常更有意义,因为它需要较少的有关DataFrame中其他行的知识。每当您关心标签而

Python 的不可变字符串及其切片

Python中的字符串是不可变的,并且支持缓冲区接口(interface)。在使用切片或.split()方法时,不返回新字符串,而是返回指向旧字符串部分的缓冲区可能是有效的。但是,每次都会构造一个新的字符串对象。为什么?我看到的唯一原因是它会使垃圾收集变得更加困难。正确:在常规情况下,内存开销是线性的并且不明显。复制很快,分配也很快。但是Python已经做的太多了,所以也许这样的缓冲区值得付出努力?编辑:似乎以这种方式形成子字符串会使内存管理变得更加复杂。只使用了任意字符串的20%,并且我们无法释放字符串的其余部分的情况是一个简单的示例。我们可以改进内存分配器,这样它就可以部分地解除分

python - 将两个变量分配给一个列表切片

是否可以一次分配给列表切片,这将实现以下目标:mylist=[1,2,3,4,5,6,7]xs=mylist[:-1]x=mylist[-1]xs==[1,2,3,4,5,6]x==7我知道我可以这样写:xs,x=mylist[:-1],mylist[-1]但我想知道是否有其他方法可以做到这一点。或者被Haskell的模式匹配宠坏了。类似于x,xs=mylist[:funky:slice:method:] 最佳答案 您可以在Python3中:>>>*xs,x=[1,2,3,4,5,6,7]>>>xs[1,2,3,4,5,6]>>>x

python - 字典中的 NumPy 切片表示法

我想知道是否可以在python字典中存储numpy切片符号。像这样的东西:lookup={0:[:540],30:[540:1080],60:[1080:]}可以使用nativepython切片语法,例如slice(0,10,2),但我无法存储更复杂的切片。例如,多维[:,:2,:,:540]。我目前的解决方法是将值存储为元组,然后将它们解压到必要的切片中。在Python2.x中工作。 最佳答案 Python将语法[:,:2,:,:540]转换为slice对象的元组:(slice(None,None,None),slice(None

python - 如何在 python 中切片元组列表?

假设:L=[(0,'a'),(1,'b'),(2,'c')]如何获取每个元组的索引0作为假装结果:[0,1,2]为此,我使用了pythonlistcomprehension并解决了问题:[num[0]fornuminL]不过,它一定是一种pythonic方式来像L[:1]那样切片,但是当然这种切片不起作用。有没有更好的解决方案? 最佳答案 您可以使用*和zip()解包。>>>l=[(0,'a'),(1,'b'),(2,'c')]>>>foriteminzip(*l)[0]:...printitem,...012对于Python3,z

进行 "size safe"切片的 Pythonic 方式

这里引用https://stackoverflow.com/users/893/greg-hewgill对ExplainPython'sslicenotation的回答。Pythoniskindtotheprogrammeriftherearefeweritemsthanyouaskfor.Forexample,ifyouaskfora[:-2]andaonlycontainsoneelement,yougetanemptylistinsteadofanerror.Sometimesyouwouldprefertheerror,soyouhavetobeawarethatthismay