我希望Jupyter能够打印所有交互式输出而不需要打印,而不仅仅是最后的结果.怎么做?
示例:
a=3
a
a+1
Run Code Online (Sandbox Code Playgroud)
我想展示
3
4
问题:
在2维平面上给出N个点.同一条直线上的最大点数是多少?
问题有O(N 2)解决方案:遍历每个点并找到dx / dy
与当前点相关的点数.将dx / dy
关系存储在哈希映射中以提高效率.
有没有比O(N 2)更好的解决这个问题的方法?
我找不到用matplotlib
Python库绘制任意行的方法.它允许绘制水平线和垂直线(与matplotlib.pyplot.axhline
和matplotlib.pyplot.axvline
,例如),但我没有看到如何通过两个特定点划一条线(x1, y1)
和(x2, y2)
.有办法吗?有一个简单的方法吗?
我在numpy中有一个坐标点云.对于大量的点,我想知道点是否位于点云的凸包中.
我尝试了pyhull,但我无法弄清楚如何检查点是否在ConvexHull
:
hull = ConvexHull(np.array([(1, 2), (3, 4), (3, 6)]))
for s in hull.simplices:
s.in_simplex(np.array([2, 3]))
Run Code Online (Sandbox Code Playgroud)
引发LinAlgError:数组必须是正方形.
Brendan Gregg的CPU Flame Graph是一种基于调用堆栈在一段时间内可视化CPU使用情况的方法.
他的FlameGraph github项目提供了一种与语言无关的绘制这些图形的方法:
对于每种语言,FlameGraph都需要一种以如下行的形式提供堆栈输入的方法:
grandparent_func;parent_func;func 42
Run Code Online (Sandbox Code Playgroud)
这意味着检测程序被观察到运行函数func
,其中parent_func
调用它从顶级函数调用grandparent_func
.它说调用堆栈被观察了42次.
如何从Python程序中收集堆栈信息并将其提供给FlameGraph?
对于奖励积分:如何扩展以便显示C和Python堆栈,甚至是Linux上的内核(与Brendan网站上的某些Java和node.js火焰图类似)?
遵循"武士原则",我试图在我的功能上做这个,但似乎是错的......
return <value> if <bool> else raise <exception>
Run Code Online (Sandbox Code Playgroud)
有没有其他"美丽"的方式来做到这一点?谢谢
我想知道下面解释的任务是否在理论上是可行的,如果是这样,我怎么能做到.
给你一个N
元素空间(即0
和之间的所有数字N-1
.)让我们看看那个空间上所有排列的空间,然后调用它S
.可以标记的i
第th个成员是带有词典编号的排列.S
S[i]
i
例如,如果N
是3,那么S
这个排列列表是:
S[0]: 0, 1, 2
S[1]: 0, 2, 1
S[2]: 1, 0, 2
S[3]: 1, 2, 0
S[4]: 2, 0, 1
S[5]: 2, 1, 0
Run Code Online (Sandbox Code Playgroud)
(当然,当看到一个大的时候N
,这个空间变得非常大,N!
确切地说.)
现在,我已经知道如何通过其索引号来获得排列i
,并且我已经知道如何反转(得到给定排列的词典编号.)但我想要更好的东西.
一些排列本身可能很大.例如,如果你正在看N=10^20
.(的大小S
将是(10^20)!
我相信这是我在一个堆栈溢出问题提起过的最大号:)
如果你只是在那个空间上看一个随机的排列,那么你将无法将整个东西存储在你的硬盘上,更不用说通过词典编号来计算每个项目了.我想要的是能够对该排列进行项目访问,并获得每个项目的索引.也就是说,给定N
和i
指定一个排列,有一个函数接受一个索引号并找到该索引中的数字,另一个函数接受一个数字并找到它所在的索引.我想这样做O(1)
,所以我不需要在排列中存储或迭代每个成员.
你说疯了吗?不可能?那可能.但请考虑一下:像AES这样的分组密码本质上是一种排列,它几乎完成了我上面概述的任务.AES具有16个字节的块大小,这意味着N
是256^16
它是围绕10^38
.(S
重要的是,它的大小是一个惊人的(256^16)!
,或者说是围绕着10^85070591730234615865843651857942052838 …
encryption algorithm permutation combinatorics number-theory
我正在尝试使用Python生成器重现反应式扩展“共享”的可观察概念。
假设我有一个API,可以让我像这样使用无限流:
def my_generator():
for elem in the_infinite_stream():
yield elem
Run Code Online (Sandbox Code Playgroud)
我可以多次使用此生成器,如下所示:
stream1 = my_generator()
stream2 = my_generator()
Run Code Online (Sandbox Code Playgroud)
并且the_infinite_stream()
将被调用两次(每个生成器一次)。
现在说这the_infinite_stream()
是一项昂贵的手术。有没有办法在多个客户端之间“共享”生成器?似乎tee可以做到,但是我必须提前知道我想要多少个独立的生成器。
这个想法是,在其他使用反应性扩展(RxJava,RxSwift)“共享”流的语言(Java,Swift)中,我可以方便地在客户端上复制该流。我想知道如何在Python中做到这一点。
注意:我正在使用asyncio
Python 3.7提供了dataclasses
具有预定义特殊功能的新功能.
从全局来看,dataclasses
并SimpleNameSpace
都提供了很好的数据封装工厂.
@dataclass
class MyData:
name:str
age: int
data_1 = MyData(name = 'JohnDoe' , age = 23)
data_2 = SimpleNameSpace(name = 'JohnDoe' , age = 23)
Run Code Online (Sandbox Code Playgroud)
很多时候我SimpleNameSpace
只是用来包装数据并移动它.
我甚至将它子类化为添加特殊功能:
from types import SimpleNameSpace
class NewSimpleNameSpace(SimpleNameSpace):
def __hash__(self):
return some_hashing_func(self.__dict__)
Run Code Online (Sandbox Code Playgroud)
对于我的问题:
SimpleNameSpace
和dataclasses
?SimpleNameSpace
?dataclasses
迎合什么?How efficient is python (cpython I guess) when allocating resources for a newly created instance of a class? I have a situation where I will need to instantiate a node class millions of times to make a tree structure. Each of the node objects should be lightweight, just containing a few numbers and references to parent and child nodes.
For example, will python need to allocate memory for all the "double underscore" properties of each instantiated object (e.g. the docstrings, …
python ×8
algorithm ×2
c ×1
class ×1
conditional ×1
convex-hull ×1
cpython ×1
encryption ×1
exception ×1
generator ×1
geometry ×1
instance ×1
ipython ×1
jupyter ×1
linux-kernel ×1
matplotlib ×1
numpy ×1
performance ×1
permutation ×1
python-3.7 ×1
python-3.x ×1
raise ×1