- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
正如标题所暗示的那样,numpy.dot(我认为 numpy 是通用的)在更新我的系统后执行速度要慢得多。我要比较的示例代码是:
from numpy import *
import time
A=random.random((1000,1000))
B=random.random((1000,1000))
st=time.time();dot(A,B);end=time.time();print end-st
以下代码在我的另一台计算机上耗时约 0.09 秒(有问题的计算机过去运行速度与另一台计算机一样快),但代码在有问题的计算机上耗时约 0.26 秒。
这是我解决这个问题的尝试。我的第一个猜测是,1:ATLAS 没有连接到 numpy。因此,我使用 synaptic、libatlas3-bas、libatlas-doc、libatlas-dev、libatlas3gf-bas、libatlas-bas-dev 安装了 atlas 包。
安装后,我通过键入检查 numpy 是否链接到 atlas
import numpy.distutils.system_info as sysinfo
sysinfo.get_into('atlas')
返回信息如下:
ATLAS version 3.10.1 built by buildd on Sat Jul 27 19:04:50 UTC 2013:
UNAME : Linux roseapple 3.2.0-37-generic #58-Ubuntu SMP Thu Jan 24 15:28:10 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
INSTFLG : -1 0 -a 1 -l 1
ARCHDEFS : -DATL_OS_Linux -DATL_ARCH_x86SSE2 -DATL_CPUMHZ=1596 -DATL_SSE2 -DATL_SSE1 -DATL_USE64BITS -DATL_GAS_x8664
F2CDEFS : -DAdd_ -DF77_INTEGER=int -DStringSunStyle
CACHEEDGE: 1048576
F77 : /usr/bin/x86_64-linux-gnu-gfortran-4.8, version GNU Fortran (Ubuntu/Linaro 4.8.1-8ubuntu1) 4.8.1
F77FLAGS : -fomit-frame-pointer -mfpmath=sse -O2 -msse2 -fPIC -m64
SMC : /usr/bin/c99-gcc, version gcc (Ubuntu/Linaro 4.8.1-8ubuntu1) 4.8.1
SMCFLAGS : -fomit-frame-pointer -mfpmath=sse -O2 -msse2 -fPIC -m64
SKC : /usr/bin/c99-gcc, version gcc (Ubuntu/Linaro 4.8.1-8ubuntu1) 4.8.1
SKCFLAGS : -fomit-frame-pointer -mfpmath=sse -O2 -msse2 -fPIC -m64
Out[12]:
{'define_macros': [('ATLAS_INFO', '"\\"3.10.1\\""')],
'include_dirs': ['/usr/include/atlas'],
'language': 'f77',
'libraries': ['lapack', 'f77blas', 'cblas', 'atlas'],
'library_dirs': ['/usr/lib/atlas-base/atlas', '/usr/lib/atlas-base']}
所以,我假设它是链接的。我还进入了 numpy/core/路径并输入了
$ldd _dotblas.so
输出是
linux-vdso.so.1 => (0x00007fff16ffa000)
libcblas.so.3 => /usr/lib/libcblas.so.3 (0x00007fa913908000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa9136eb000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa913322000)
libatlas.so.3 => /usr/lib/libatlas.so.3 (0x00007fa912d8f000)
libgfortran.so.3 => /usr/lib/x86_64-linux-gnu/libgfortran.so.3 (0x00007fa912a77000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa912860000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa91255c000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa913d4f000)
libquadmath.so.0 => /usr/lib/x86_64-linux-gnu/libquadmath.so.0 (0x00007fa912320000)
然后,为了确保 libcblas.so.3 链接到 ATLAS,我输入了
$ /usr/sbin/update-alternatives --config libblas.so.3
There are 4 choices for the alternative libblas.so.3 (providing /usr/lib/libblas.so.3).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/openblas-base/libopenblas.so.0 40 auto mode
* 1 /usr/lib/atlas-base/atlas/libblas.so.3 35 manual mode
2 /usr/lib/libblas/libblas.so.3 10 manual mode
3 /usr/lib/openblas-base/libopenblas.so 30 manual mode
4 /usr/lib/openblas-base/libopenblas.so.0 40 manual mode
Press enter to keep the current choice[*], or type selection number: 1
以下步骤没有解决我的问题...
我意识到我的 CPU 节流开启了,当 CPU 节流开启时 ATLAS 无法正常工作。所以,我使用 rcconf 将其关闭,并像上面那样重新安装了 Atlas 并重新安装了 Numpy...但它并没有解决问题...
现在我正在运行 python 2.7.5+,所以我也尝试重新安装它.. 没有解决问题。
我检查了我的内存..
total used free shared buffers cached
内存:5959 2345 3614 0 86 730
-/+ 缓冲区/缓存:1528 4431
交换:6133 0 6133
而且我的内存是空闲的..我的 matlab 代码运行速度和以前一样快..所以我不认为这是内存问题..
有人可以帮忙吗?似乎 numpy 的线性代数包很慢......现在,它延迟了我的模拟很多,所以我无法真正运行我的代码。非常感谢您!让我知道我的问题是否有任何混淆。!
最佳答案
当您说“并重新安装 Numpy”时,您使用的是 pip 还是 apt-get/synaptic?
可通过 apt-get install python-numpy
获得的 Ubuntu(或 Debian)打包版本的 NumPy 是预编译的。另一方面,在 NumPy 源目录中使用 pip install numpy
或 python setup.py
安装 NumPy 会使用可用的编译器从源构建 NumPy。
然后您可能更喜欢在自己的计算机上使用 ATLAS 编译 NumPy。 ATLAS 将使用您计算机的特性优化 NumPy 库(有效地需要关闭 CPU 节流)。
apt-get install -y python-pip python-dev build-essential
pip install -U cython
apt-get install -y gcc gfortran libatlas-base-dev liblapack-dev
pip install numpy
您不妨阅读 ATLAS installation guide或 instructions to build NumPy and SciPy from source on Linux
这可能是您已经完成的,但其他人可能会发现它有用!
关于将 Ubuntu 从 13.04 更新到 13.10 后,Python Numpy.dot 运行速度慢了 20 倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26362932/
我正在使用 XCode 中的 SwiftUI 为 iPhone 编写应用程序。 在其中一个 View 中,有一个 Text 标签,每当按下按钮时都会更改其文本。 整个 View 是 Spring 动画
我有一个功能可以在生成报告时在弹出窗口中显示点点点。我想显示文本: 正在生成报告。生成报告..正在生成报告... ...重复,直到报告准备好。到目前为止,我只能在弹出窗口中获取三个点,而无法获取其他文
是否可以从 ... 中删除元素并将 ... 传递给其他函数?我的前两次尝试失败了: parent = function(...) { a = list(...) str(a) a$t
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
http://pastebin.com/index/9M2rA8cx那有我所有的代码。 您会注意到这两个 div 在 large.css 中居中。但是,文本在每个“。”之后重新居中。被申请;被应用。如
特殊文件 . 和 .. 是否实际存在并作为普通文件存储/位于文件系统中,或者它们是否仅在访问时解释/创建文件系统处理程序? .(当前目录) ..(父目录) 我的假设是它们不存在——否则,当您创建符号链
我想用...指示我想从 data.table 的自定义函数返回的变量目的。这是一个最小的可复制示例: library(data.table) d = data.table(mtcars) getvar
我想允许用户输入以下十进制或整数值 (A) .5 0.500 3 0 0.0 30 500000 4000.22 0. 这是我使用的以下正则表达式: factor: /^-?\d*[.]??\d*$/
我似乎明白 TLD 后的点无关紧要,例如: http://example.com/somepage/ == http://example.com./somepage/ (注意 TLD 后面的点) 我的
我试图用这个 DOT 输入文件创建一个简单的循环图: digraph { rankdir=LR; node0 [label = "0", group="bottom"]; n
我的问题与 this one 基本相同但给出的答案对我不起作用。 这是一个示例渲染 (source)和 compound=true; overlap=scalexy; splines=true; la
我正在尝试为作业问题制作一个点脚本生成器,它进行得很顺利,但我遇到了这个问题,其中一些未在子图中定义的节点被放置在其中。例如以下点脚本: digraph dg { compound=true;
我写了下面的 DOT 来生成图表。除了定义和布置的节点外,我想在标记为 L 的边缘的左侧和右侧放置一个节点,它们应该靠近 L,并且在 NODE3 和 NODE6 之间。 我尝试了一些不可见的节点。新节
我正在使用 python 和 matplotlib 来生成图形输出。 有没有一种简单的方法来生成点划线样式? 我知道 '--'、'-.' 和 ':' 选项。不幸的是,'-..' 不会产生点划线。 我查
给定以下字符串: "foo.bar.baz" 使用 Java String split 可以很容易地在“点”上分割它: split("foo.bar.baz", "\.") 但是,如果我想保留该点(如
有区别吗 import numpy as np np.dot(a,b) 和 a.dot(b) 内部?我找不到关于后一种方法的任何文档。 最佳答案 如果a 是一个数组,它们是等价的。您找不到关于 dot
有区别吗?如果不是,按惯例首选什么?性能似乎几乎相同。 a=np.random.rand(1000,1000) b=np.random.rand(1000,1000) %timeit a.dot(b)
如何使用 gvpr 将 DOT 语言中包含多个图形的文件拆分为多个 DOT 文件? 输入(1 个文件): # single.dot digraph one { a -> b; } digraph
RecursiveDirectoryIterator 似乎从本地主机和实时服务器给我两个不同的结果, define ('WEBSITE_DOCROOT', str_replace('\\', '/',
我有这样的例子: "hello . world . thanks ." 我想得到这个: "hello. world. thanks." 我试过了 text = text.replaceAll(" ."
我是一名优秀的程序员,十分优秀!