我正在Python中寻找动态增长的向量,因为我事先不知道它们的长度。此外,我想计算这些稀疏向量之间的距离,最好使用 scipy.spatial.distance 中的距离函数(尽管欢迎任何其他建议)。有什么想法如何做到这一点?(最初,它不需要高效。)
预先非常感谢!
我试图在稀疏矩阵中添加一个numpy ndarray,但我没有成功.我想知道是否有办法这样做,而不将我的稀疏矩阵转换成密集的矩阵.
另一个问题是是否可以添加两个稀疏矩阵.
x = np.dot(aSparseMatrix, weights)
y = x + bias
Run Code Online (Sandbox Code Playgroud)
其中x是我的稀疏矩阵,偏差是numpy数组.我得到的错误是:
NotImplementedError: adding a scalar to a CSC or CSR matrix is not supported
aSparseMatrix.shape (1, 10063)
weights.shape (10063L, 2L)
bias.shape (2L,)
Run Code Online (Sandbox Code Playgroud) 我知道有些矩阵有很多数据,而另一些矩阵主要是 0 或者是空的。但是,与创建 DenseMatrix 对象来保存稀疏矩阵相比,创建 SparseMatrix 对象来保存稀疏矩阵的优势是什么?就方法而言,它们似乎都提供或多或少相同的操作。
我还想知道什么时候你会使用 Matrix 对象来保存数据——因为在有什么优势或情况下,这比使用其他两个更受欢迎。
我正在使用 Armadillo C++ 线性代数库,并且试图找出如何将sp_mat稀疏矩阵对象转换为标准mat密集矩阵。
查看内部代码 doc,sp_mat并且mat不共享公共父类,这让我相信没有办法将 an 强制转换sp_mat为 a mat。顺便说一句,conv_to<mat>::from(sp_mat x)不起作用。
也许有一种棘手的方法可以使用高级mat构造函数来做到这一点?例如,以某种方式创建一个零矩阵并传递 中非零元素的位置和值sp_mat。
有谁知道有效的方法来做到这一点?提前致谢。
我想第一次编写Compiler,我的参考文献是"编译器原理,技术和工具".对于词法设计,我写了我的语言标记的FA,现在我想从状态转换表编写C#代码,但它是一个40 X 30矩阵,在这个矩阵中只有50个条目!我想压缩这个稀疏矩阵!书中有一种方法说:
有一个更微妙的数据结构允许我们将数组访问的速度与默认的列表压缩相结合.我们可以将这个结构看作四个数组,如图3.66.5所示.基数组用于确定状态s的条目的基本位置,它们位于下一个和检查数组中.如果检查数组告诉我们base [s]给出的那个是无效的,则默认数组用于确定替代基本位置.为了计算nextState(s,a),输入a上状态s的转换,我们检查下一个并检查位置l = base [s] + a中的条目,其中字符a被视为整数,大概在0的范围内如果检查[l] = s,则此条目有效,输入a上状态s的下一个状态为next [l].如果检查[l]!= s,那么我们确定另一个状态t = default [s]并重复该过程,好像t是当前状态.更正式地说,函数nextstate定义如下:
Run Code Online (Sandbox Code Playgroud)int nextState(s, a) { if ( check[base[s] + a] = s ) return next[base[s] + a]; else return nextState(default[s], a); }
我不明白这四个数组是由什么组成的?任何人都能为我解释一下吗?你有另一个简单的算法来优化我的代码进行稀疏压缩吗?我知道CSR压缩但是我不知道如何使用它们在我的C#代码中编写nextState(s,a)!你有什么想法吗?
我有一个包含一些元素的稀疏矩阵。现在我想对其进行标准化。但是,当我这样做时,它会转换为 numpy 数组,从性能的角度来看,这是不可接受的。
为了使事情更具体,请考虑以下示例:
x = csr_matrix([[0, 1, 1], [2, 3, 0]]) # sparse
normalization = x.sum(axis=1) # dense, this is OK
x / normalization # this is dense, not OK, can be huge
Run Code Online (Sandbox Code Playgroud)
有没有一种优雅的方法可以做到这一点而不必诉诸 for 循环?
编辑
是的,这可以使用“l1”标准化来完成sklearn.preprocessing.normalize,但是,我不想依赖 sklearn。
我有一个 20,000 x 20,000 Numpy 矩阵,我希望通过文件存储,其中平均体积只有 12 个值。
仅存储以下格式的值的最有效方法是什么
if array[i][j] == 1:
file.write("{} {} {{}}\n".format(i, j)
Run Code Online (Sandbox Code Playgroud)
其中 (i, j) 是数组的索引?
我目前正在 Python 上使用最小二乘算法,涉及一些大地测量计算。
我选择了Python(它不是最快的)并且它运行得很好。然而,在我的代码中,我有大型稀疏对称(非正定,因此不能使用 Cholesky)矩阵的逆来执行(下图)。我目前使用 np.linalg.inv() ,它使用 LU 分解方法。
我很确定在速度方面需要进行一些优化。
我想到了 Cuthill-McKee 算法来重新排列矩阵并取其逆。您有什么想法或建议吗?
非常感谢您的回答!
