• 关于

    cycle函数

    的搜索结果

问题

地理位置函数是什么?

nicenelly 2019-12-01 21:26:44 1396 浏览量 回答数 0

回答

作为一个同时使用R和python的用户,我已经多次遇到过这种类型的问题。 在R中,它们有来自包tidyr的内置函数unnest。但是在Python(panda)中,没有针对这类问题的内置函数。 我知道对象列类型总是使数据难以转换成panda的函数。当我收到这样的数据时,首先想到的是“平铺”或取消列的嵌套。 对于这类问题,我使用了panda和python函数。如果您担心上述解决方案的速度,请检查user3483203的答案,因为他正在使用numpy,而且大多数时候numpy更快。如果速度对您很重要,我推荐Cpython和numba。 方法0[熊猫>= 0.25] 从panda 0.25开始,如果你只需要爆炸一列,你可以使用爆炸函数: df.explode('B') A B 0 1 1 1 1 2 0 2 1 1 2 2 方法1 应用+ pd。系列(容易理解,但在性能方面不推荐)。 df.set_index('A').B.apply(pd.Series).stack().reset_index(level=0).rename(columns={0:'B'}) Out[463]: A B 0 1 1 1 1 2 0 2 1 1 2 2 方法2 对DataFrame构造函数使用repeat,重新创建您的DataFrame(擅长性能,不擅长多列) df=pd.DataFrame({'A':df.A.repeat(df.B.str.len()),'B':np.concatenate(df.B.values)}) df Out[465]: A B 0 1 1 0 1 2 1 2 1 1 2 2 方法2.1 例如,除了A,我们还有A。如果我们仍然使用上面的方法(方法2),我们就很难一个一个地重新创建列。 解决方案:在“取消嵌套”单个列之后加入或合并索引 s=pd.DataFrame({'B':np.concatenate(df.B.values)},index=df.index.repeat(df.B.str.len())) s.join(df.drop('B',1),how='left') Out[477]: B A 0 1 1 0 2 1 1 1 2 1 2 2 如果需要的列顺序与前面完全相同,请在末尾添加reindex。 s.join(df.drop('B',1),how='left').reindex(columns=df.columns) 方法3 重新创建列表 pd.DataFrame([[x] + [z] for x, y in df.values for z in y],columns=df.columns) Out[488]: A B 0 1 1 1 1 2 2 2 1 3 2 2 如果超过两列,则使用 s=pd.DataFrame([[x] + [z] for x, y in zip(df.index,df.B) for z in y]) s.merge(df,left_on=0,right_index=True) Out[491]: 0 1 A B 0 0 1 1 [1, 2] 1 0 2 1 [1, 2] 2 1 1 2 [1, 2] 3 1 2 2 [1, 2] 方法4 使用重索引或loc df.reindex(df.index.repeat(df.B.str.len())).assign(B=np.concatenate(df.B.values)) Out[554]: A B 0 1 1 0 1 2 1 2 1 1 2 2 #df.loc[df.index.repeat(df.B.str.len())].assign(B=np.concatenate(df.B.values)) 方法5 当列表只包含唯一的值时: df=pd.DataFrame({'A':[1,2],'B':[[1,2],[3,4]]}) from collections import ChainMap d = dict(ChainMap(*map(dict.fromkeys, df['B'], df['A']))) pd.DataFrame(list(d.items()),columns=df.columns[::-1]) Out[574]: B A 0 1 1 1 2 1 2 3 2 3 4 2 方法6 使用numpy实现高性能: newvalues=np.dstack((np.repeat(df.A.values,list(map(len,df.B.values))),np.concatenate(df.B.values))) pd.DataFrame(data=newvalues[0],columns=df.columns) A B 0 1 1 1 1 2 2 2 1 3 2 2 方法7 使用基本函数itertools循环和链:纯粹的python解决方案只是为了好玩 from itertools import cycle,chain l=df.values.tolist() l1=[list(zip([x[0]], cycle(x[1])) if len([x[0]]) > len(x[1]) else list(zip(cycle([x[0]]), x[1]))) for x in l] pd.DataFrame(list(chain.from_iterable(l1)),columns=df.columns) A B 0 1 1 1 1 2 2 2 1 3 2 2 泛化为多个列 df=pd.DataFrame({'A':[1,2],'B':[[1,2],[3,4]],'C':[[1,2],[3,4]]}) df Out[592]: A B C 0 1 [1, 2] [1, 2] 1 2 [3, 4] [3, 4] Self-def功能: def unnesting(df, explode): idx = df.index.repeat(df[explode[0]].str.len()) df1 = pd.concat([ pd.DataFrame({x: np.concatenate(df[x].values)}) for x in explode], axis=1) df1.index = idx return df1.join(df.drop(explode, 1), how='left') unnesting(df,['B','C']) Out[609]: B C A 0 1 1 1 0 2 2 1 1 3 3 2 1 4 4 2 以上方法都是关于垂直反嵌套和爆炸,如果你需要扩展列表水平,检查pd。DataFrame构造函数 df.join(pd.DataFrame(df.B.tolist(),index=df.index).add_prefix('B_')) Out[33]: A B C B_0 B_1 0 1 [1, 2] [1, 2] 1 2 1 2 [3, 4] [3, 4] 3 4 更新的功能 def unnesting(df, explode, axis): if axis==1: idx = df.index.repeat(df[explode[0]].str.len()) df1 = pd.concat([ pd.DataFrame({x: np.concatenate(df[x].values)}) for x in explode], axis=1) df1.index = idx return df1.join(df.drop(explode, 1), how='left') else : df1 = pd.concat([ pd.DataFrame(df[x].tolist(), index=df.index).add_prefix(x) for x in explode], axis=1) return df1.join(df.drop(explode, 1), how='left') 测试输出 unnesting(df, ['B','C'], axis=0) Out[36]: B0 B1 C0 C1 A 0 1 2 1 2 1 1 3 4 3 4 2

kun坤 2019-12-27 10:25:01 0 浏览量 回答数 0

回答

您需要一个函数,它将ODE的参数和绘图的其他参数作为命名参数。在最简单的情况下,只有a,b,c,d。此功能需要生成一个图。 def plot_solution(a=1.,b=1.,c=1.,d=0.5): def f(s, t): l, p = s dldt = a*l - b*l*p dpdt = -c*p + d*l*p return [dldt, dpdt] t = np.arange(0,10*np.pi,0.01) s0=[0.1,5] s = odeint(f, s0, t) plt.plot(t,s[:,0],'r-', linewidth=2.0) plt.plot(t,s[:,1],'b-', linewidth=2.0) plt.xlabel("day in menstrual cycle") plt.ylabel("concentration (ng/mL)") plt.legend(["LH","P"]) plt.show() 然后按照文档中的说明调用交互式小部件功能。为命名参数生成滑块,这些参数以数字对作为输入。 w = interactive(plot_solution, a=(-2.0,2.0), b=(-2.0,2.0), c=(-2.0,2.0), d=(-2.0,2.0))display(w)

一码平川MACHEL 2019-12-02 01:54:21 0 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

回答

你可以使用PIL image. resize()函数来改变图像的大小。下面是一个修改后的代码基础上你的: with open('list.txt', 'r') as f: #sparces the list file into something the code can understand lines = f.read().strip('[]') images = [i.strip('"') for i in lines.split(',')] var1 = input("Random ? ") if var1.lower() in ("yes", "y"): random.shuffle(images) root = tk.Tk() root.attributes('-fullscreen', 1) # make the root window fullscreen root.config(cursor="none") # hide the mouse cursor # get the screen size scr_width = root.winfo_screenwidth() scr_height = root.winfo_screenheight() print("Preparing images ...") photos = [] for image in images: img = Image.open(image) if img.width > scr_width or img.height > scr_height: # only resize image bigger than the screen ratio = min(scr_width/img.width, scr_height/img.height) img = img.resize((int(img.width*ratio), int(img.height*ratio))) photos.append(ImageTk.PhotoImage(img)) slides = cycle(photos) def slideShow(): displayCanvas.config(image=next(slides)) root.after(1200, slideShow) displayCanvas = tk.Label(root) displayCanvas.pack(expand=1, fill=tk.BOTH) root.bind('<Escape>', lambda e: root.destroy()) # allow Esc key to terminate the slide show slideShow() # start the slide show root.focus_force() root.mainloop()

kun坤 2019-12-27 10:18:50 0 浏览量 回答数 0

回答

# Class just to illustrate when deletion occurs class Data: def __del__(self): print('Data.__del__') # Node class involving a cycle class Node: def __init__(self): self.data = Data() self.parent = None self.children = [] def add_child(self, child): self.children.append(child) child.parent = self 下面我们使用这个代码来做一些垃圾回收试验: >>> a = Data() >>> del a # Immediately deleted Data.__del__ >>> a = Node() >>> del a # Immediately deleted Data.__del__ >>> a = Node() >>> a.add_child(Node()) >>> del a # Not deleted (no message) >>> 可以看到,最后一个的删除时打印语句没有出现。原因是Python的垃圾回收机制是基于简单的引用计数。 当一个对象的引用数变成0的时候才会立即删除掉。而对于循环引用这个条件永远不会成立。 因此,在上面例子中最后部分,父节点和孩子节点互相拥有对方的引用,导致每个对象的引用计数都不可能变成0。 Python有另外的垃圾回收器来专门针对循环引用的,但是你永远不知道它什么时候会触发。 另外你还可以手动的触发它,但是代码看上去很挫: >>> import gc >>> gc.collect() # Force collection Data.__del__ Data.__del__ >>> 如果循环引用的对象自己还定义了自己的 __del__() 方法,那么会让情况变得更糟糕。 假设你像下面这样给Node定义自己的 __del__() 方法: # Node class involving a cycle class Node: def __init__(self): self.data = Data() self.parent = None self.children = [] def add_child(self, child): self.children.append(child) child.parent = self # NEVER DEFINE LIKE THIS. # Only here to illustrate pathological behavior def __del__(self): del self.data del.parent del.children 这种情况下,垃圾回收永远都不会去回收这个对象的,还会导致内存泄露。 如果你试着去运行它会发现,Data.__del__ 消息永远不会出现了,甚至在你强制内存回收时: >>> a = Node() >>> a.add_child(Node() >>> del a # No message (not collected) >>> import gc >>> gc.collect() # No message (not collected) >>> 弱引用消除了引用循环的这个问题,本质来讲,弱引用就是一个对象指针,它不会增加它的引用计数。 你可以通过 weakref 来创建弱引用。例如: >>> import weakref >>> a = Node() >>> a_ref = weakref.ref(a) >>> a_ref <weakref at 0x100581f70; to 'Node' at 0x1005c5410> >>> 为了访问弱引用所引用的对象,你可以像函数一样去调用它即可。如果那个对象还存在就会返回它,否则就返回一个None。 由于原始对象的引用计数没有增加,那么就可以去删除它了。例如; >>> print(a_ref()) <__main__.Node object at 0x1005c5410> >>> del a Data.__del__ >>> print(a_ref()) None >>> 通过这里演示的弱引用技术,你会发现不再有循环引用问题了,一旦某个节点不被使用了,垃圾回收器立即回收它。

景凌凯 2020-04-17 18:20:16 0 浏览量 回答数 0

问题

Nginx性能为什么如此吊

小柒2012 2019-12-01 21:20:47 15038 浏览量 回答数 3

问题

DRDS 错误代码如何解决?

猫饭先生 2019-12-01 21:21:21 7993 浏览量 回答数 0

问题

【iOS学习全家桶】190道iOS热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:23 5197 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 企业建站模板