我有一个大的NxN密集对称矩阵,并希望特征向量对应于k个最大特征值.找到它们的最佳方法是什么(最好是使用numpy,但也许通常使用blas/atlas/lapack,如果这是唯一的方法)?通常,N比k大得多(比如N> 5000,k <10).
如果我的起始矩阵稀疏,Numpy似乎只有找到k个最大特征值的函数.
我有几千点的散点图.这篇文章告诉我如何标记它们:
但这看起来像是一场有如此多点的灾难.我想要的是有一个"工具提示"类型标签,当你鼠标悬停一个点时弹出.这可能使用matplotlib吗?
我有一个有限度量空间给定为(对称)k乘k距离矩阵.我想要一种算法(近似)在欧几里德空间R ^(k-1)中等距地嵌入它.虽然通过求解距离给出的方程组并不总是可以完成,但我正在寻找一种嵌入了一些(非常小的)可控误差的解决方案.
我目前使用多维缩放(MDS),输出维度设置为(k-1).在我看来,通常MDS可能会针对您尝试将环境嵌入维度减少到小于(k-1)(通常为2或3)的情况进行优化,并且可能有更好的算法用于我的限制案件.
问题:使用欧氏距离在R ^ {k-1}中实现大小为k的度量空间的好/快算法是什么?
一些参数和指针:
(1)我的k相对较小.说3 <k <25
(2)我实际上并不关心我是否嵌入了R ^ {k-1}.如果它简化了事物/使事情变得更快,任何R ^ N也会很好,只要它是等距的.如果我有一个更快的算法,或者如果我增加到R ^ k或R ^(2k + 1),我会很高兴.
(3)如果你可以指向python实现,我会更高兴.
(4)任何比MDS更好的东西都能奏效.
有没有办法从numpy获取更详细的错误消息
"运行时警告:在乘法中遇到无效值"
它来自代码中的某一行,我正在做一些数组操作.我可以报告numpy:
(1)关于无效值的更多信息(inf?nan?)
(2)导致问题的数组条目?
当然我可以自己检查数组但如果numpy可以告诉我问题是什么以及在哪里会很好.
我想知道什么版本的python boost_python.so期待.这是在具有多个python版本的计算机上,我没有自己构建/安装boost(我也没有root访问权限).
我怎么知道为什么版本的python boost_python.so编译?
我没有在ldd的输出中找到任何有用的东西,但是在这里包含它,以防其他人看到的东西.
-bash-3.2$ ldd -v libboost_python.so.1.46.1
libutil.so.1 => /lib64/libutil.so.1 (0x00002ad65582d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ad655a30000)
libdl.so.2 => /lib64/libdl.so.2 (0x00002ad655c4b000)
librt.so.1 => /lib64/librt.so.1 (0x00002ad655e50000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00002ad656059000)
libm.so.6 => /lib64/libm.so.6 (0x00002ad656359000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002ad6565dd000)
libc.so.6 => /lib64/libc.so.6 (0x00002ad6567eb000)
/lib64/ld-linux-x86-64.so.2 (0x000000374c600000)
Version information:
./libboost_python.so.1.46.1:
libgcc_s.so.1 (GCC_3.0) => /lib64/libgcc_s.so.1
libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
libstdc++.so.6 (CXXABI_1.3) => /usr/lib64/libstdc++.so.6
libstdc++.so.6 (GLIBCXX_3.4) => /usr/lib64/libstdc++.so.6
/lib64/libutil.so.1:
libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
/lib64/libpthread.so.0:
ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2 …Run Code Online (Sandbox Code Playgroud) 我有一个firefox扩展,它监听"http-on-modify-request"并检查来自firefox的所有GET请求.我希望能够取消请求(比如向页面返回失败代码)或修改请求的URI但似乎无法做到.例如,nsiHttpChannel对象不允许它
delete httpChannel;
Run Code Online (Sandbox Code Playgroud)
或重置为空请求
httpChannel = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Components.interfaces.nsIXMLHttpRequest);
Run Code Online (Sandbox Code Playgroud)
不工作(你不能修改URI).
那么你如何在firefox扩展中拦截和修改 http GET请求.
我有一个稀疏的数组,似乎太大了,无法在内存中有效地处理handel(2000x2500000,float).我可以把它形成一个稀疏的lil_array(scipy),但如果我尝试输出一个列或行压缩的稀疏数组(A.tocsc(),A.tocsr())我的机器内存不足(并且之间也存在严重的不匹配)文本文件4.4G和pickeled lil数组12G中的数据 - 拥有一个更接近原始数据大小的磁盘格式会很不错.
我将来可能会处理更大的阵列.
问题:处理大型磁盘阵列的最佳方法是什么,以便我可以透明地使用常规numpy函数.例如,行和列的总和,矢量积,最大值,最小值,切片等?
是什么方式去pytables?是否有一个好的(快速)sql-numpy中间件层?内置于numpy的磁盘阵列上的秘密?
在过去使用(稍微小一点)的数组时,我总是将长期计算结果缓存到磁盘上.当阵列最终<4G左右但不再成立时,这种方法有效.
我有一个numpy数组,我想以一种不涉及副本的方式在一堆python进程之间共享.我使用sharedmem包从现有的numpy数组创建一个共享的numpy数组.
import sharedmem as shm
def convert_to_shared_array(A):
shared_array = shm.shared_empty(A.shape, A.dtype, order="C")
shared_array[...] = A
return shared_array
Run Code Online (Sandbox Code Playgroud)
我的问题是每个子进程都需要访问随机分布在数组中的行.目前,我使用sharedmem包创建一个共享的numpy数组,并将其传递给每个子进程.每个进程还有一个需要访问的行列表idx.当我这样做时,问题在于子进程:
#idx = list of randomly distributed integers
local_array = shared_array[idx,:]
# Do stuff with local array
Run Code Online (Sandbox Code Playgroud)
它创建了数组的副本,而不仅仅是另一个视图.该数组非常大并且在共享之前首先对其进行操作,以便每个进程访问一系列连续的行
local_array = shared_array[start:stop,:]
Run Code Online (Sandbox Code Playgroud)
花了太长时间.
问题:在不涉及复制数组的python进程之间共享对numpy数组的随机访问有什么好的解决方案?
子进程需要只读访问(因此无需锁定访问).