我对boost :: compressed_matrix的工作原理感到困惑.假设我像这样声明compressed_matrix:
boost::numeric::ublas::compressed_matrix<double> T(1000, 1000, 3*1000);
Run Code Online (Sandbox Code Playgroud)
这为1000x1000矩阵中的3*1000个元素分配空间.现在我该如何给它提供非零元素的位置?何时以及如何设置非零元素?是每次我在矩阵中分配一个元素,例如B(4,4)= 4,它会将该元素标记为非零吗?
如果可能的话,如果你能帮助我学习这个例子,我将非常感激.对内部实施的一些见解会很棒.我想确保我不会通过猜测来编写次优的程序.
谢谢!
我想知道如何在Python中有效地添加稀疏矩阵.
我有一个程序将一个大任务分解为子任务并将它们分配到多个CPU.每个子任务产生一个结果(scipy稀疏矩阵格式为:)lil_matrix.
稀疏矩阵维度是:100000x500000,这是非常巨大的,所以我真的需要最有效的方法将所有生成的稀疏矩阵求和成一个稀疏矩阵,使用一些C编译方法或其他东西.
是否可以将一个numpy.exp或类似的逐点运算符应用于一个scipy.sparse.lil_matrix或另一个稀疏矩阵格式的所有元素?
import numpy
from scipy.sparse import lil_matrix
x = numpy.ones((10,10))
y = numpy.exp(x)
x = lil_matrix(numpy.ones((10,10)))
# y = ????
Run Code Online (Sandbox Code Playgroud)
numpy.exp(x)或scipy.exp(x)产生一个AttributeError,并numpy.exp(x.data)产生相同的.
谢谢!
我正在优化代码,它严重依赖于定制的Matrix库(不会从项目中排除它,因为它无处不在.这不好,但它是一个事实......)许多计算是用10-的矩阵完成的20行和列,许多计算包括二次形式
C = A*B*A'
Run Code Online (Sandbox Code Playgroud)
我意识到A经常是稀疏的,我想利用这个事实.所以我正在寻找一种能够处理这种情况的算法.数值稳定性很重要.有什么我可以用的吗?(我没有写我们的图书馆所以我不知道我是否应该考虑到任何陷阱?)
由于"我们的"简单O(n ^ 3)乘法在目标平台上执行速度比本征3快,因为我需要数值稳定性且矩阵不是很大,我猜Strassen的算法以及Coppersmith-Winograd算法都不是我正在寻找什么.相反,它只是二次形式乘法,让我可以轻松地检查A中的零.
谢谢你的任何建议!
我正在使用mongoengine和烧瓶.我有一个名为profile的db.Document类,其中我希望一个字段可以为空并且是唯一的,我理解这样做的方法是使该字段的索引既稀疏=真又唯一=真,我该如何这样做呢?
我必须创建一个非常大的3D矩阵(例如:) 500000x60x60.有没有办法在matlab中做到这一点?
当我尝试
omega = zeros(500000,60,60,'single');
Run Code Online (Sandbox Code Playgroud)
我收到一个out-of-memory错误.
稀疏函数不是选项,因为它仅适用于2D矩阵.对于更高维矩阵,还有其他选择吗?
我有一个非常大且稀疏的矩阵,大小为180GB(文本,30k*3M),仅包含条目而没有其他数据.我必须对它进行矩阵乘法,求逆和一些类似的线性代数运算.我尝试了八度和简单的单线程C代码进行乘法,但是40GB的系统RAM很快用完,然后我发现程序开始抖动.还有其他选择吗?我不熟悉MathLab或任何其他可以帮助我这样做的矩阵操作库.
当我运行具有10行和3 M列的两个矩阵的简单矩阵乘法及其转置时,它会出现以下错误:
memory exhausted or requested size too large for range of Octave's index type
Run Code Online (Sandbox Code Playgroud)
我不确定这些是否适用于Matlab.对于稀疏矩阵表示和矩阵乘法,是否有另一个库或代码.
考虑R会话中定义的以下简单函数:
nathanvan@nathanvan-N61Jq:~$ R
R version 3.0.1 (2013-05-16) -- "Good Sport"
... snip ...
> make.a.Matrix <- function(data, nrow, ncol) {
+ require(Matrix)
+ return( Matrix(data, nrow=nrow, ncol=ncol))
+ }
>
> transpose.a.Matrix <- function(data, nrow, ncol ) {
+ return(t( make.a.Matrix(data, nrow=nrow, ncol=ncol) ))
+ }
>
> make.a.Matrix(1:12, 3, 4)
Loading required package: Matrix
Loading required package: lattice
3 x 4 Matrix of class "dgeMatrix"
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11 …Run Code Online (Sandbox Code Playgroud) 给定一个稀疏的二进制矩阵A(csr,coo,等等)我想制作一个图,这样我可以看到图中的位置(i,j)= white,如果A(i,j)= 1,和(i, j)= A,如果A(i,j)= 0;
对于密集的numpy数组,matshow将完成这项工作.但是,我的稀疏矩阵(例如100000 x 1000000)的维度很大,可以转换为密集阵列.我想知道如何在稀疏矩阵中绘制模式.
谢谢
我正在尝试计算一个简单的点积,但保持原始矩阵的非零值不变.玩具示例:
import numpy as np
A = np.array([[2, 1, 1, 2],
[0, 2, 1, 0],
[1, 0, 1, 1],
[2, 2, 1, 0]])
B = np.array([[ 0.54331039, 0.41018682, 0.1582158 , 0.3486124 ],
[ 0.68804647, 0.29520239, 0.40654206, 0.20473451],
[ 0.69857579, 0.38958572, 0.30361365, 0.32256483],
[ 0.46195299, 0.79863505, 0.22431876, 0.59054473]])
Run Code Online (Sandbox Code Playgroud)
期望的结果:
C = np.array([[ 2. , 1. , 1. , 2. ],
[ 2.07466874, 2. , 1. , 0.73203386],
[ 1. , 1.5984076 , 1. , 1. ],
[ 2. , 2. , …Run Code Online (Sandbox Code Playgroud) sparse-matrix ×10
python ×4
scipy ×4
matrix ×3
numpy ×3
c++ ×2
matlab ×2
add ×1
algorithm ×1
boost ×1
indexing ×1
math ×1
matplotlib ×1
mongoengine ×1
namespaces ×1
octave ×1
optimization ×1
r ×1
unique ×1