我有一个由bigsplit()操作产生的列表列表(来自biganalytics包,bigmemory包的一部分).
每个列表表示矩阵中的列,并且每个列表项是二进制矩阵中值1的索引.
将此列表转换为稀疏二进制(0/1)矩阵的最佳方法是什么?在lapply()中使用lapply()是唯一的解决方案吗?如何将列表命名为列的名称?
我在调整矩阵大小时遇到了麻烦 - set_shape函数似乎没有效果:
>>> M
<14x3562 sparse matrix of type '<type 'numpy.float32'>'
with 6136 stored elements in LInked List format>
>>> new_shape = (15,3562)
>>> M.set_shape(new_shape)
>>> M
<14x3562 sparse matrix of type '<type 'numpy.float32'>'
with 6136 stored elements in LInked List format>
Run Code Online (Sandbox Code Playgroud)
有人遇到过这个吗?
我也尝试过这样做,即
>>> M._shape = new_shape
>>> M.data = np.concatenate(M.data, np.empty((0,0), dtype=np.float32))
Run Code Online (Sandbox Code Playgroud)
但是这引发了一个错误:
*** TypeError: only length-1 arrays can be converted to Python scalars
Run Code Online (Sandbox Code Playgroud)
要么
>>> M.data = np.concatenate(M.data, [])
*** TypeError: an integer is required …Run Code Online (Sandbox Code Playgroud) 我用C++编写了一个例程,用Gauss-Seidel方法求解方程组Ax = b.但是,我想将此代码用于稀疏的特定"A"矩阵(大多数元素为零).这样,此解算器所采用的大部分时间都是繁忙地将一些元素乘以零.
例如,对于以下方程组:
| 4 -1 0 0 0 | | x1 | | b1 |
|-1 4 -1 0 0 | | x2 | | b2 |
| 0 -1 4 -1 0 | | x3 | = | b3 |
| 0 0 -1 4 -1 | | x4 | | b4 |
| 0 0 0 -1 4 | | x5 | | b5 |
Run Code Online (Sandbox Code Playgroud)
使用Gauss-Seidel方法,我们将为x1提供以下迭代公式:
x1 = [b1 - ( - 1*x2 + 0*x3 + …
我想知道检查scipy稀疏矩阵的最佳方法,如果是CSC或CSR.现在我正在使用.
rows, cols = X.shape()
indptr = X.indptr()
if len(indptr) == cols + 1:
print "csc"
else:
print "csr"
Run Code Online (Sandbox Code Playgroud)
谢谢.
我需要计算以下矩阵表达式:XT - Y并保持元素仅对应于矩阵的非零元素Y.例如,如果:
In [63]: X.dot(T.T) - Y
Out[63]: array([[ -6, -2], [ -9, -12]])
In [64]: Y
Out[64]: array([[5, 0], [7, 8]])
Run Code Online (Sandbox Code Playgroud)
然后结果应该是[[-6, 0], [-9, -12]].
X并且T都是矢量.问题是,无论X.dot(T.T)和Y具有大尺寸(比方说350 x 23 000 000),所以Y被存储为一个scipy.sparse.csc_matrix有大约2亿的值.我没有足够的内存来存储中间XT结果.
当然,可以迭代所有非零元素Y并手动计算每个元素,XT然后手动构造结果csc_matrix.结果将具有相同indices和indptr属性的Y,这让我觉得,应该有一个更短或更快的方式.
假设我有一个稀疏矩阵A.我想对它做大量计算.计算不修改A,只访问其元素,例如取一行A然后乘以某些东西.我想知道在进行任何计算之前是否应该将A转换为完整矩阵,还是直接进行?
换句话说,访问稀疏矩阵中的元素比完整矩阵更慢?
我是第一次使用Eigen Sparse Matrices,现在我想知道如何获得非零元素的索引.我构建了我的稀疏矩阵如下:
Eigen::SparseMatrix<Eigen::ColMajor> Am(3,3);
Run Code Online (Sandbox Code Playgroud)
我可以通过查看m_indices变量来查看VS中的一些索引.但我无法访问它们.谁能帮帮我吗?像矩阵一样
( 1 0 1
0 1 1
0 0 0 )
Run Code Online (Sandbox Code Playgroud)
我希望指数是这样的(0,0), (0,2), (1,1), (1,2).
有什么办法吗?
PS我的矩阵大于3x3.
我有一个有效的LAPACK实现,据我所知,它包含BLAS.
我想使用稀疏BLAS而据我了解这个网站,稀疏BLAS是BLAS的一部分.
但是当我尝试使用稀疏blas手册运行下面的代码时
g ++ -o sparse.x sparse_blas_example.c -L/usr/local/lib -lblas && ./sparse_ex.x
编译器(或链接器?)要求blas_sparse.h.当我把那个文件放在工作目录中时,我得到了:
ludi@ludi-M17xR4:~/Desktop/tests$ g++ -o sparse.x sparse_blas_example.c -L/usr/local/lib -lblas && ./sparse_ex.x
In file included from sparse_blas_example.c:3:0:
blas_sparse.h:4:23: fatal error: blas_enum.h: No such file or directory
#include "blas_enum.h"
Run Code Online (Sandbox Code Playgroud)
使用SPARSE BLAS和LAPACK我该怎么办?我可以开始将很多头文件移动到工作目录中,但我收集了我已经将它们与lapack一起使用了!
/* C example: sparse matrix/vector multiplication */
#include "blas_sparse.h"
int main()
{
const int n = 4;
const int nz = 6;
double val[] = { 1.1, 2.2, 2.4, 3.3, 4.1, 4.4 };
int indx[] = { …Run Code Online (Sandbox Code Playgroud) 我正在使用numpy和scipy在Python中移植MATLAB代码,我需要在MATLAB中使用numpy/scipy等效的稀疏函数.
这是MATLAB中稀疏函数的用法,
sparse([3; 2], [2; 4], [3; 0])
Run Code Online (Sandbox Code Playgroud)
得到:
Trial>> m = sparse([3; 2], [2; 4], [3; 0])
m =
(3,2) 3
Trial>> full(m)
ans =
0 0 0 0
0 0 0 0
0 3 0 0
Run Code Online (Sandbox Code Playgroud)
我有这些,但他们没有给出MATLAB版本的功能,
sps.csr_matrix([3, 2], [2, 4], [3, 0])
sps.csr_matrix(np.array([[3], [2]]), np.array([[2], [4]]), np.array([[3], [0]]))
sps.csr_matrix([[3], [2]], [[2], [4]], [[3], [0]])
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢.
我有一个巨大的Eigen::SparseMatrix,我想在矩阵中的非零条目中添加一个标量.
也就是说,如果我有一个矩阵A,其值_表示0稀疏矩阵中的一个条目,即它从未插入.
1 _ 2
A = _ 3 _
4 5 6
Run Code Online (Sandbox Code Playgroud)
我想做点什么,A += 1然后到达
2 _ 3
A = _ 4 _
5 6 7
Run Code Online (Sandbox Code Playgroud)
零条目不受影响的地方.
有没有有效的方法来做到这一点?