我想用scipy 计算矩阵的数学等级.最明显的函数numpy.rank计算数组的维数(即标量有维度0,向量1,矩阵2等).我知道该numpy.linalg.lstsq模块具有此功能,但我想知道这样的基本操作是否内置于矩阵类中.
这是一个明确的例子:
from numpy import matrix, rank
A = matrix([[1,3,7],[2,8,3],[7,8,1]])
print rank(A)
Run Code Online (Sandbox Code Playgroud)
这给出2了维度,我正在寻找答案3.
Python curve_fit使用单个自变量计算函数的最佳拟合参数,但有没有办法,使用curve_fit或其他东西,以适应具有多个独立变量的函数?例如:
def func(x, y, a, b, c):
return log(a) + b*log(x) + c*log(y)
Run Code Online (Sandbox Code Playgroud)
其中x和y是自变量,我们想要适合a,b和c.
如何在使用Python保存在磁盘上的稀疏CSR数组的块上并行应用某些函数?顺序地,这可以例如通过保存CSR阵列并且joblib.dump打开它joblib.load(.., mmap_mode="r")并逐个处理行的块来完成.使用dask可以更有效地完成这项工作吗?
特别是,假设一个人不需要在稀疏数组上完成所有可能的核心操作,而只需要并行加载行块(每个块是一个CSR数组)并对它们应用一些函数(在我的情况下它会例如estimator.predict(X)来自scikit-learn).
此外,磁盘上是否有适合此任务的文件格式?Joblib有效,但我不确定作为内存映射加载的CSR数组的(并行)性能; spark.mllib似乎使用一些自定义稀疏存储格式(似乎没有纯Python解析器)或LIBSVM格式(根据我的经验,scikit-learn中的解析器比它慢得多joblib.dump)...
注意:我在https://github.com/dask/dask/上阅读了文档,有关它的各种问题,但我仍然不确定如何最好地解决这个问题.
编辑:为了给出一个更实际的例子,下面是在密码数组的dask中工作的代码,但在使用带有此错误的稀疏数组时失败,
import numpy as np
import scipy.sparse
import joblib
import dask.array as da
from sklearn.utils import gen_batches
np.random.seed(42)
joblib.dump(np.random.rand(100000, 1000), 'X_dense.pkl')
joblib.dump(scipy.sparse.random(10000, 1000000, format='csr'), 'X_csr.pkl')
fh = joblib.load('X_dense.pkl', mmap_mode='r')
# computing the results without dask
results = np.vstack((fh[sl, :].sum(axis=1)) for sl in gen_batches(fh.shape[0], batch_size))
# computing the results with dask
x = da.from_array(fh, chunks=(2000)) …Run Code Online (Sandbox Code Playgroud) type(A)
<class 'scipy.sparse.csc.csc_matrix'>
A.shape
(8529, 60877)
print A[0,:]
(0, 25) 1.0
(0, 7422) 1.0
(0, 26062) 1.0
(0, 31804) 1.0
(0, 41602) 1.0
(0, 43791) 1.0
print A[1,:]
(0, 7044) 1.0
(0, 31418) 1.0
(0, 42341) 1.0
(0, 47125) 1.0
(0, 54376) 1.0
print A[:,0]
#nothing returned
Run Code Online (Sandbox Code Playgroud)
现在我不明白的是当我输入A [1,:]时应该从第2行中选择元素,但是我从打印的第1行中获取元素.当我输入应该返回第一列的A [:,0]但是我没有打印任何内容.为什么?
我开始使用Continuum.io的Python Anaconda发行版来完成scipy工作.
我已经能够启动并运行Anaconda,但我不知道Anaconda是否为它创建的每个新环境创建了一个新的PYTHONPATH环境变量,或者它是否依赖于通用系统. PYTHONPATH
我在文档中找不到任何相关信息.
此外,当我做了一个时printenv,我没有PYTHONPATH在新创建的环境中看到变量 - 虽然我确实找到了一些新的anaconda创建的环境变量.
我能找到的最好的是Anaconda将一些Anaconda目录和新的环境目录添加到PATH变量的头部 - 但这并不一定将新的包与系统环境隔离,但它很接近.
有谁知道这个问题的答案或找到解决这个问题的方法?
我需要使用标准的Python包创建一个numpy 2D数组,它表示多边形的二进制掩码.
(更大的上下文:我想使用scipy.ndimage.morphology.distance_transform_edt获取此多边形的距离变换.)
谁能告诉我怎么做?
我.mat通过scipy.io.loadmat它加载了一个MATLAB 文件,它给了我一个numpy.void对象列表.
有人可以告诉我它们是什么,如何使用它们以及在哪里可以获得一些参考文档?
问题: 对于点位置,在Python中计算反距离加权(IDW)插值的最佳方法是什么?
一些背景: 目前我正在使用RPy2与R及其gstat模块进行交互.不幸的是,gstat模块与arcgisscripting冲突,我通过在单独的进程中运行基于RPy2的分析来解决这个问题.即使在最近/未来版本中解决了这个问题,并且效率可以提高,我仍然希望删除我对安装R的依赖.
gstat网站确实提供了一个独立的可执行文件,使用我的python脚本更容易打包,但我仍然希望Python解决方案不需要多次写入磁盘并启动外部进程.插值函数的调用次数,单独的点和值集,在我正在执行的处理中可以接近20,000.
我特别需要为点进行插值,因此在性能方面使用ArcGIS中的IDW函数生成比使用R更严重的栅格声音.....除非有办法有效地屏蔽掉我需要的点.即使进行了这种修改,我也不希望性能如此出色.我会将此选项作为另一种选择.更新:这里的问题是你绑定到您正在使用的单元格大小.如果减小单元大小以获得更好的准确性,则处理需要很长时间.如果你想要特定点的值,你还需要通过点数提取来跟进所有丑陋的方法.
我看过scipy文档,但看起来没有一种直接计算IDW的方法.
我正在考虑滚动我自己的实现,可能使用一些scipy功能来定位最近的点并计算距离.
我错过了一些明显的东西吗 是否有一个我没见过的python模块完全符合我的要求?在scipy的帮助下创建自己的实现是明智的选择吗?
我要重新安装numpy,并scipy在我的Ubuntu清醒.由于这些东西带有很多依赖项,我想知道是否有一个全面的测试套件来检查新安装是否真的有效.
当然,我可以拿一堆我的脚本并逐个运行它们以确定它们是否继续工作,但这无法防止在将来的某个时候我会尝试使用我没有做过的事情.以前使用它会破坏(或者更糟糕的是,默默地产生不存在).
我正在试验同情,我遇到了一个我无法解决的问题.
使用scipy我可以编写一个表达式并为其计算x值的数组,如下所示:
import scipy
xvals = scipy.arange(-100,100,0.1)
f = lambda x: x**2
f(xvals)
Run Code Online (Sandbox Code Playgroud)
使用sympy我可以写相同的表达式如下:
import sympy
x = sympy.symbols('x')
g = x**2
Run Code Online (Sandbox Code Playgroud)
我可以通过执行以下操作来评估此表达式的单个值:
g.evalf(subs={x:10})
Run Code Online (Sandbox Code Playgroud)
但是我无法弄清楚如何评估x值的数组,就像我用scipy做的那样.我该怎么做?