- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我一直在寻找方法来轻松地对一些简单的分析代码进行多线程处理,因为我注意到 numpy 它只使用一个内核,尽管它应该是多线程的。
我知道 numpy 是为多个内核配置的,因为我可以看到使用 numpy.dot 的测试使用了我所有的内核,所以我只是将 mean 重新实现为一个点积,它运行得更快。是否有某种原因意味着无法自行运行这么快?我发现较大数组的行为类似,尽管该比率比我的示例中显示的 3 接近 2。
我一直在阅读大量关于类似 numpy 速度问题的帖子,显然它的方式比我想象的要复杂。任何见解都会有所帮助,我宁愿只使用均值,因为它更具可读性且代码更少,但我可能会切换到基于点的均值。
In [27]: data = numpy.random.rand(10,10)
In [28]: a = numpy.ones(10)
In [29]: %timeit numpy.dot(data,a)/10.0
100000 loops, best of 3: 4.8 us per loop
In [30]: %timeit numpy.mean(data,axis=1)
100000 loops, best of 3: 14.8 us per loop
In [31]: numpy.dot(data,a)/10.0 - numpy.mean(data,axis=1)
Out[31]:
array([ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 1.11022302e-16, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
-1.11022302e-16])
最佳答案
I've been looking for ways to easily multithread some of my simple analysis code since I had noticed numpy it was only using one core, despite the fact that it is supposed to be multithreaded.
谁说它应该是多线程的?
numpy
主要设计为在单核上尽可能快,并且在需要时尽可能可并行化。但是你仍然需要并行化它。
特别是,您可以同时对独立的子对象进行操作,并且缓慢的操作会在可能的情况下释放 GIL——尽管“尽可能”可能还不够。另外,numpy
对象被设计为尽可能容易地在进程之间共享或传递,以方便使用multiprocessing
.
有一些专门的方法可以自动并行化,但大多数核心方法不是。特别是,dot
尽可能在 BLAS 之上实现,并且 BLAS 在大多数平台上自动并行化,但是 mean
用纯 C 代码实现。
见 Parallel Programming with numpy and scipy了解详情。
那么,您如何知道哪些方法是并行化的,哪些不是?而且,在那些不是,你怎么知道哪些可以很好地手动线程化,哪些需要多处理?
对此没有好的答案。您可以做出有根据的猜测(X 似乎可能是在 ATLAS 之上实现的,而我的 ATLAS 副本是隐式线程的),或者您可以阅读源代码。
但通常情况下,最好的办法是尝试并测试。如果代码使用 100% 的一个内核和 0% 的其他内核,请添加手动线程。如果它现在使用 100% 的一个内核和 10% 的其他内核并且几乎没有运行得更快,请将多线程更改为多处理。 (幸运的是,Python 使这非常容易,特别是如果您使用 concurrent.futures
中的 Executor 类或 multiprocessing
中的 Pool 类。但是您仍然经常需要考虑一下,并测试共享与共享的相对成本。如果您有大型数组,则通过。)
另外,正如 kwatford 指出的那样,仅仅因为某些方法似乎不是隐式并行的,并不意味着它不会在下一个版本的 numpy 或下一个版本的 BLAS 中或在不同的平台,甚至在安装了稍微不同的东西的机器上。所以,准备重新测试。并执行类似 my_mean = numpy.mean
的操作然后使用 my_mean
无处不在,因此您只需将一行更改为 my_mean = pool_threaded_mean
.
关于python - 为什么不是 numpy.mean 多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16617973/
入门教程使用内置的梯度下降优化器非常有意义。但是,k均值不仅可以插入梯度下降中。似乎我不得不编写自己的优化程序,但是鉴于TensorFlow原语,我不确定如何执行此操作。 我应该采取什么方法? 最佳答
我想知道 K-Mean 和 K-Means++ 算法之间的区别。如果有人了解 K-Means++ 算法的流程,您能举例说明一下吗?虽然,我了解 K-Mean 算法,但发现如何实现 K-Means++
我有不同的数据帧均值计算值。通常,我想它们应该是一样的。或者有什么区别: daily1 = daily_above_zero['2011-2'].mean() daily1 Out[181]: P_S
我有关于人们每周上类旅行次数的数据。随着行程的距离,我对两个变量之间的关系感兴趣。 (预计频率会随着距离的增加而下降,本质上是一种负相关。)Cor.test 支持这个假设:-0.08993444,p
我了解 k-means 算法步骤。 但是我不确定该算法是否会始终收敛?或者观察总是可以从一个质心切换到另一个质心? 最佳答案 该算法总是收敛(按定义)但 不一定是全局最优 . 算法可能会从质心切换到质
(添加了可重现的示例。) 我对 rnorm 函数有点困惑。 我期待 mean(rnorm(100,mean=0,sd=1))为0;和 sd(rnorm(100,mean=0,sd=1))为 1。但给出
我想计算一个平均值。这是带有示例数据的代码: # sample data Nr <- c(1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
我有一个像这样的数据框: Id F M R 7 1 286 907 12 1 286 907 17 1 186 1271 21 1 296 905 30 1
如果我们将 K-means 和顺序 K-means 方法应用于具有相同初始设置的相同数据集,我们会得到相同的结果吗?解释你的理由。 个人认为答案是否定的,顺序K-means得到的结果取决于数据点的呈现
我想使用 MEAN JavaScript 堆栈,但我注意到有两个不同的堆栈,它们有自己的网站和安装方法:mean.js 和 mean.io。所以我开始问自己这个问题:“我用哪一个?”。 所以为了回答这
似乎有多种方法可以安装 Mean Stack (mean.io) 的所有模块。但是,在 c9.io 中执行此操作的最佳方法是什么?我一直在尝试很多事情,但我似乎并没有全部掌握。 c9.io 有专门的
在开发过程中,我希望加载原始(未聚合).js 文件。 Mean.io 文档说: All javascript within public is automatically aggregated wit
我正在尝试添加 angular-material到 mean.io应用。 在我的自定义包中,我使用 bower 来安装 angular-material,现在我有一个 .../public/asset
我只运行以下三行: df = pd.read_hdf('data.h5') print(df.mean()) print(df['derived_3'].mean()) 第一个 print 列出了每一
k-means++算法有助于原始k-means算法的以下两点: 原始的 k-means 算法在输入大小的 super 多项式的最坏情况下运行时间,而 k-means++ 声称是 O(log k)。 与
这两个字段有什么区别? : 每个请求的时间(平均) 每个请求的时间(平均,跨所有并发请求) 它们每个是如何计算的? 示例输出: Time per request: 3953.446 [ms
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 7年前关闭。 Improve this qu
我想看看是否可以根据它们所处理的目标函数来比较两者的性能? 最佳答案 顺便说一句,Fuzzy-C-Means (FCM) 聚类算法也称为Soft K-Means。 目标函数实际上是相同的,唯一的区别是
虽然我看到了很多与此相关的问题,但我并没有真正得到答案,可能是因为我是使用 nltk 集群的新手。我确实需要对聚类新手进行基本解释,特别是关于 NLTK K 均值聚类的向量表示以及如何使用它。我有一个
我在学习mean.io来自 this tutorial video ,它显示了示例包(由 mean package mymodule 创建。它也在 docs 的“包”下进行了描述)。我想帮助了解给定的
我是一名优秀的程序员,十分优秀!