- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
当使用 scipy.sparse.spdiags 或 scipy.sparse.diags 时,我注意到 want 我认为是例程中的错误,例如
scipy.sparse.spdiags([1.1,1.2,1.3],1,4,4).toarray()
返回
array([[ 0. , 1.2, 0. , 0. ],
[ 0. , 0. , 1.3, 0. ],
[ 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. ]])
对于正对角线,它会丢弃前 k 个数据。有人可能会争辩说,这有一些重要的编程原因,我只需要用零填充。好吧,尽管这可能很烦人,但可以使用 scipy.sparse.diags 给出正确的结果。然而,这个例程有一个无法解决的错误
scipy.sparse.diags([1.1,1.2],0,(4,2)).toarray()
给予
array([[ 1.1, 0. ],
[ 0. , 1.2],
[ 0. , 0. ],
[ 0. , 0. ]])
很好,而且
scipy.sparse.diags([1.1,1.2],-2,(4,2)).toarray()
给予
array([[ 0. , 0. ],
[ 0. , 0. ],
[ 1.1, 0. ],
[ 0. , 1.2]])
但是
scipy.sparse.diags([1.1,1.2],-1,(4,2)).toarray()
给出错误提示 ValueError: Diagonal length (index 0: 2 at offset -1) does not agree with matrix size (4, 2)。显然答案是
array([[ 0. , 0. ],
[ 1.1, 0. ],
[ 0. , 1.2],
[ 0. , 0. ]])
对于额外的随机行为,我们有
scipy.sparse.diags([1.1],-1,(4,2)).toarray()
给予
array([[ 0. , 0. ],
[ 1.1, 0. ],
[ 0. , 1.1],
[ 0. , 0. ]])
有谁知道是否有构建对角稀疏矩阵的函数可以实际使用?
最佳答案
执行摘要:spdiags
工作正常,即使矩阵输入不是最直观的。 diags
有一个错误会影响矩形矩阵中的某些偏移量。 scipy github 上有一个错误修复。
spdiags
的例子是:
>>> data = array([[1,2,3,4],[1,2,3,4],[1,2,3,4]])
>>> diags = array([0,-1,2])
>>> spdiags(data, diags, 4, 4).todense()
matrix([[1, 0, 3, 0],
[1, 2, 0, 4],
[0, 2, 3, 0],
[0, 0, 3, 4]])
请注意,data
的第 3 列始终出现在稀疏的第 3 列中。其他列也排成一行。但在它们“从边缘掉下来”的地方被省略了。
此函数的输入是一个矩阵,而 diags
的输入是一个参差不齐的列表。稀疏矩阵的对角线都有不同数量的值。因此,规范必须在一个或另一个中适应这一点。 spdiags
通过忽略一些值来做到这一点,diags
通过接受列表输入。
sparse.diags([1.1,1.2],-1,(4,2))
错误令人费解。
spdiags
等效项确实有效:
In [421]: sparse.spdiags([[1.1,1.2]],-1,4,2).A
Out[421]:
array([[ 0. , 0. ],
[ 1.1, 0. ],
[ 0. , 1.2],
[ 0. , 0. ]])
此代码块中出现错误:
for j, diagonal in enumerate(diagonals):
offset = offsets[j]
k = max(0, offset)
length = min(m + offset, n - offset)
if length <= 0:
raise ValueError("Offset %d (index %d) out of bounds" % (offset, j))
try:
data_arr[j, k:k+length] = diagonal
except ValueError:
if len(diagonal) != length and len(diagonal) != 1:
raise ValueError(
"Diagonal length (index %d: %d at offset %d) does not "
"agree with matrix size (%d, %d)." % (
j, len(diagonal), offset, m, n))
raise
diags
中的实际矩阵构造函数是:
dia_matrix((data_arr, offsets), shape=(m, n))
这与 spdiags
使用的构造函数相同,但没有任何操作。
In [434]: sparse.dia_matrix(([[1.1,1.2]],-1),shape=(4,2)).A
Out[434]:
array([[ 0. , 0. ],
[ 1.1, 0. ],
[ 0. , 1.2],
[ 0. , 0. ]])
在 dia
格式中,输入完全按照 spdiags
给出的方式存储(用带有额外值的矩阵完成):
In [436]: M.data
Out[436]: array([[ 1.1, 1.2]])
In [437]: M.offsets
Out[437]: array([-1], dtype=int32)
正如 @user2357112
指出的那样,length = min(m + offset, n - offset
是错误的,在测试用例中生成 3
. 将它更改为 length = min(m + k, n - k)
使这个 (4,2) 矩阵的所有情况都有效。但它因转置而失败:diags([1.1 ,1.2], 1, (2, 4))
截至 10 月 5 日,此问题的更正为:
https://github.com/pv/scipy-work/commit/529cbde47121c8ed87f74fa6445c05d71353eb6c
length = min(m + offset, n - offset, min(m,n))
通过此修复,diags([1.1,1.2], 1, (2, 4))
可以正常工作。
关于python - scipy sparse diags 矩阵构造错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33623131/
有人知道什么时候最好选择哪个吗?在我看来,它们是一样的... lsmr lsqr 最佳答案 两种软件包的功能相同。 LSMR基于2010年的Fong&Saunders算法(请参阅paper),并且最近
似乎 scipy.sparse.linalg 的迭代求解器不支持 scipy.sparse 的稀疏矩阵数据类型作为方程系统的右侧(而直接求解器会)。考虑以下简短示例: import numpy as
我有一个包含多个字符串列的数据框,我想将其转换为分类数据,以便我可以运行一些模型并从中提取重要特征。 但是,由于唯一值的数量,单热编码数据会扩展到大量列,从而导致性能问题。 为了解决这个问题,我正在试
我有一些需要每天同步的 VM 镜像。 VM 文件是稀疏的。 为了节省网络流量,我只想传输图像的真实数据。 我在 rsync 中使用 --sparse 选项进行尝试,但在网络流量上,我看到整个大小都通过
我有一些不明白的信息: Bigtable may be understood a sparse table. Most cells contain nullvalues - too sparse to
我一直在查看 Matlab 的 sparse documentation试图找出是否有任何指导方针来说明何时使用稀疏表示而不是完整表示是有意义的。 例如,我有一个包含大约 30% 非零条目的矩阵 da
当我尝试编译以下程序时,编译器提示 j 和 row 未声明,这让我感到惊讶,因为 Chapel - Ranges defined using bounds of type 'range(int(64)
我需要以某种方式在磁盘上存储一个 512^3 阵列,我目前使用的是 HDF5。由于阵列稀疏,因此浪费了大量磁盘空间。 HDF5 是否为稀疏数组提供任何支持? 最佳答案 一种解决方法是使用 compre
稀疏张量与自身或密集张量的乘法在 TensorFlow 中似乎不起作用。下面的例子 from __future__ import print_function import tensorflow as
我有一个git存储库,其中有一堆大型csv,我不想克隆,因此我遇到了git sparse-checkout和这篇文章:https://github.blog/2020-01-17-bring-your
是否有一种简单的方法可以按列贬低稀疏矩阵,同时将零值视为缺失(使用 Matrix 包)? 我似乎遇到两个问题: 找到合适的列意味着 空单元格被视为零而不是缺失: M0 或者@user20650评论
我在训练具有稀疏输入数据的神经网络以解决监督回归问题时遇到问题。当我对输入数据执行均值归一化(减去均值再除以标准差)时,我得到了很多NaN值。我想知道是否有人有处理此类问题的经验。缩放稀疏输入数据的正
在 Eigen 中编辑稀疏矩阵对角线的最快方法是什么?我已经使用三元组填充了它,但我偶尔需要更改所有对角线值(它们已经设置为非零值)。 最佳答案 如果可以接受,您可以简单地使用它们的索引,例如 sp_
我看到“稀疏”和“稀疏”的使用方式表明它可以提高模型的准确性。例如: I think the unsupervised phase might be not so important if some
MATLAB Coder 似乎很花哨,可以通过将代码转换为 C/C++ 或 MEX 来加快 MATLAB 代码的速度。但是它似乎不支持稀疏矩阵,或者 matlab 函数 sparse 这对我的代码至关
我有一个使用 scipy.sparse.linalg.gmres 求解稀疏线性系统的简单代码 W, S = load_data() M = normalize(W.T.astype('float64
我正在尝试创建一个大小为 n 的多维数组(其中 n 是符号形状张量的一部分)。该数组在每个区域中都应有 0,但很少有区域是变量 b_class。 这是一个简单的 Numpy 实现,但在这种情况下,我们
Java 7 defines this option ,但我不明白它的用处。考虑这个简单的程序,它在一台足够新的 Linux 机器上运行,带有 Java 6 JVM: public static vo
我有一个 CSR matrix : >> print type(tfidf) 我想对 CSR matrix 的两行进行点积: >> v1 = tfidf.getrow(1) >> v2 = tfid
尽管一切似乎都已矢量化,但以下代码运行速度太慢。 from numpy import * from scipy.sparse import * n = 100000; i = xrange(n); j
我是一名优秀的程序员,十分优秀!