我正在做类似下面的代码,我对np.roll()函数的性能不满意.我总结了baseArray和otherArray,其中baseArray在每次迭代中由一个元素滚动.但是当我滚动它时我不需要baseArray的副本,我宁愿选择一个视图,例如当我将baseArray与其他数组相加并且如果baseArray被滚动两次时,则basearray的第二个元素与第0个元素相加otherArray,baseArray的第3个元素与otherArray等的第1个元素相加.
IE实现与np.roll()相同的结果但不复制数组.
import numpy as np
from numpy import random
import cProfile
def profile():
baseArray = np.zeros(1000000)
for i in range(1000):
baseArray= np.roll(baseArray,1)
otherArray= np.random.rand(1000000)
baseArray=baseArray+otherArray
cProfile.run('profile()')
Run Code Online (Sandbox Code Playgroud)
输出(注意第3行 - 滚动功能):
9005 function calls in 26.741 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 5.123 5.123 26.740 26.740 <ipython-input-101-9006a6c0d2e3>:5(profile)
1 0.001 0.001 26.741 26.741 <string>:1(<module>)
1000 0.237 0.000 8.966 0.009 numeric.py:1327(roll)
1000 0.004 0.000 0.005 0.000 numeric.py:476(asanyarray)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} …Run Code Online (Sandbox Code Playgroud) 如果我有类似结构的文件如下.我正在使用计算结果更新它们,我想知道结果是否已经插入到文档中.让我们说每个文档我运行计算'c'和计算'd'.现在我想显示所有文档的表格,并显示是否已经执行了计算'd'.对于这个表我不关心计算'c'.
{
"_id":1
"a":1,
"resultsOfComputation":{
"c":{large embedded document},
"d":{large embedded document}
}
}
{
"_id":2
"a":1,
"resultsOfComputation":{
"c":{large embedded document}
}
}
Run Code Online (Sandbox Code Playgroud)
我想得到一个结果,告诉我文档是否包含特定字段.例如,我想知道它是否包含字段"resultsOfComputation.d",无论该字段的值是什么.
查询"resultsOfComputation.d"的结果示例如下:
{
"_id":1
"a":1,
"resultsOfComputation":{
"d":true
}
}
{
"_id":2
"resultsOfComputation":{
"d":false
}
}
Run Code Online (Sandbox Code Playgroud)
如果"resultsOfComputation.d"不在文档中,它也可以是未定义的,这也可以:
{
"_id":1
"a":1,
"resultsOfComputation":{
"d":true
}
}
{
"_id":2
"a":1,
"resultsOfComputation":{}
}
Run Code Online (Sandbox Code Playgroud)
通常,想法是获得文档的所有根元素,但是对于所选择的(一个)计算结果仅获得真/假/未定义,因为计算的结果是大的嵌入文档.
在Windows 7 64bit上运行ipyhton笔记本并使用python 2内核启动笔记本时出现错误:
Traceback (most recent call last):
File "C:\Users\USER1\Anaconda2\lib\site-packages\notebook\base\handlers.py", line 436, in wrapper
result = yield gen.maybe_future(method(self, *args, **kwargs))
File "C:\Users\USER1\Anaconda2\lib\site-packages\notebook\services\sessions\handlers.py", line 56, in post
model = sm.create_session(path=path, kernel_name=kernel_name)
File "C:\Users\USER1\Anaconda2\lib\site-packages\notebook\services\sessions\sessionmanager.py", line 66, in create_session
kernel_name=kernel_name)
File "C:\Users\USER1\Anaconda2\lib\site-packages\notebook\services\kernels\kernelmanager.py", line 84, in start_kernel
**kwargs)
File "C:\Users\USER1\Anaconda2\lib\site-packages\jupyter_client\multikernelmanager.py", line 109, in start_kernel
km.start_kernel(**kwargs)
File "C:\Users\USER1\Anaconda2\lib\site-packages\jupyter_client\manager.py", line 244, in start_kernel
**kw)
File "C:\Users\USER1\Anaconda2\lib\site-packages\jupyter_client\manager.py", line 190, in _launch_kernel
return launch_kernel(kernel_cmd, **kw)
File "C:\Users\USER1\Anaconda2\lib\site-packages\jupyter_client\launcher.py", line 115, in launch_kernel
proc = Popen(cmd, **kwargs)
File "C:\Users\USER1\Anaconda2\lib\subprocess.py", …Run Code Online (Sandbox Code Playgroud) 在我的aggreagate管道中执行展开后,我有中间结果,例如:
[
{_id:1, precision:0.91, recall:0.71, other fields...},
{_id:1, precision:0.71, recall:0.81, other fields...},
{_id:1, precision:0.61, recall:0.91, other fields...},
{_id:2, precision:0.82, recall:0.42, other fields...},
{_id:2, precision:0.72, recall:0.52, other fields...},
{_id:2, precision:0.62, recall:0.62, other fields...}
]
Run Code Online (Sandbox Code Playgroud)
现在我想通过_id对文档进行分组,然后在每个组中查找最大召回的文档,并获取此文档的召回,精度和_id.
结果将是:
[
{_id:1, precisionOfDocWithMaxRecall:0.61, maxRecall:0.91},
{_id:2, precisionOfDocWithMaxRecall:0.62, maxRecall:0.62}
]
Run Code Online (Sandbox Code Playgroud)
我已设法使用group和max但没有精度字段获得结果.
当 URL 的查询参数发生变化时,您将如何调度 ngrx 操作?我有一个带有参数的URL(例如http://myapp.my/documents?startdate=2015-04-04&enddate=2015-06-06),当用户单击后退(前进)浏览器按钮时,Angular 将导航到上一个(下一个)URL 可能具有不同的搜索参数。所以我需要调度一个“加载文档”操作来从数据库加载相应的文档。我可以看到多种方法来做到这一点。
我可以将 ngrx @Effect 绑定到 Angular-router“navigationend”Observable 并检查 URL 是否匹配“/documents”。效果将调度加载文档操作
我可以将 ngrx @Effect 绑定到 ngrx/router-store 生成的 ROUTER_NAVIGATION 操作并执行操作。这里的问题是 ROUTER_NAVIGATION 不能保证用户真正到达预期的页面(例如他们可能被路由防护阻止),
角度 5,ngrx 4。
假设我有一个 numpy 数组 [5,7,2,3,4,6] 并且我选择子序列的长度为 3。
我想获得此类子序列的欧几里得距离。
可能的子序列是:
子序列 1. 和 3. 之间的距离将计算为 (5-2)^2 + (7-3)^2 + (2-4)^2。我想对所有子序列对执行此操作。
有没有办法避免循环?
我的真实数组很长,所以解决方案也应该是内存高效的。
编辑>
详细说明:我有一个大小为 10^5 到 10^8 元素的时间序列
时间序列正在增长。每次添加新点时,我需要取 L 个最新点,并在数据集的过去点中找到与这些点最接近的匹配。(但我希望所有距离值不仅要找到最接近的匹配项)
无需重复整个计算。“以前最新的L点”的距离可以更新,只能通过减去年龄L+1的点和加上年龄0的点(最新的)来修改。
例如,假设时间序列的大小当前为 100 且 L=10。我计算子序列 A[90:100] 到所有先前子序列的距离。当第 101 个点到达时,我可以重复使用这些距离,并且只能通过从时间序列中添加第 101 个点的距离平方并减去第 90 个点的平方来更新它们。
编辑 2>
非常感谢您的想法,看起来很神奇。我还有一个想法,特别是对于添加 tiem 系列的新元素时的在线时间序列,它可能是有效的。
我正在考虑这种更新距离的方式。要计算长度为 L=4 的第一个子序列到矩阵的距离,我们需要有以下矩阵的前 4 列(顶部和底部的三角形可以省略)。然后将距离平方并求和,如颜色所示。
为了获得 L=4 的第二个子序列的距离,我们实际上可以重用先前计算的距离并从中减去第一列(平方)并添加第四列(平方)。对于 L=4,它可能没有意义,但对于 L=100,它可能没有意义。一个距离必须从头开始计算。(实际上,如果时间序列的大小增加,则必须计算 2)。
这样我可以只保留一个子序列的距离并更新它们以获得下一个子序列的距离。
你认为这对 numpy 有效吗?有没有简单的方法来实现它?