如何获取稀疏块大小并检查Linux中reiserfs/ext3中稀疏文件中给定偏移量处是否存在数据?
我想用它来实现使用FUSE的简单的copy-on-write块设备.
或者我最好将位图保存在单独的文件中?
有谁知道如何在python中的稀疏矩阵上执行svd操作?似乎scipy.sparse.linalg中没有提供此类功能.
我正在尝试使用scipy的稀疏包来实现以下等式:
W = x[:,1] * y[:,1].T + x[:,2] * y[:,2].T + ...
Run Code Online (Sandbox Code Playgroud)
其中x和y是nxm csc_matrix.基本上我试图将x的每个col乘以y的每个col并将得到的nxn矩阵求和.然后我想制作所有非零元素1.
这是我目前的实施:
c = sparse.csc_matrix((n, n))
for i in xrange(0,m):
tmp = bam.id2sym_thal[:,i] * bam.id2sym_cort[:,i].T
minimum(tmp.data,ones_like(tmp.data),tmp.data)
maximum(tmp.data,ones_like(tmp.data),tmp.data)
c = c + tmp
Run Code Online (Sandbox Code Playgroud)
此实现具有以下问题:
内存使用似乎爆炸了.根据我的理解,内存应该只会随着c变稀疏而增加,但我看到循环开始吞噬> 20GB的内存,其中= 10,000,m = 100,000(x和y的每一行只有大约60个非零元素).
我正在使用一个效率不高的python循环.
我的问题:有更好的方法吗?控制内存使用量是我首先关注的问题,但要让它更快更好!
谢谢!
我有两个sq矩阵(a,b)的大小为100000 X 100000.我必须区分这两个矩阵(c = ab).结果矩阵'c'是稀疏矩阵.我想找到所有非零元素的索引.我必须多次做这个操作(> 100).
最简单的方法是使用两个for循环.但这是计算密集型的.你能告诉我任何算法或包/库最好在R/python/c中尽快做到这一点吗?
好吧,我不认为,我可以用文字解释这个问题所以,这里是ipython会话的片段,我导入scipy,以构建一个稀疏矩阵.
In [1]: import scipy as sp
In [2]: a = sp.sparse.lil_matrix((5,5))
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/home/liveuser/<ipython-input-2-b5a55fc2d0ac> in <module>()
----> 1 a = sp.sparse.lil_matrix((5,5))
AttributeError: 'module' object has no attribute 'sparse'
In [3]: import scipy.sparse as spar
In [4]: ax = spar.lil_matrix((5,5))
In [5]: a = sp.sparse.lil_matrix((5,5)) # you are kidding me?
In [6]: a
Out[6]:
<5x5 sparse matrix of type '<type 'numpy.float64'>'
with 0 stored elements in LInked List format>
In [7]: ax
Out[7]:
<5x5 sparse …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用knn创建一个简单的推荐系统.
可以说我有一张桌子:
User | Book1 | Book2 | Book3 | Book4 | Book5 | Book6 | Book7 |
1 | 5 | ? | 3 | ? | 4 | 3 | 2 |
2 | 3 | 4 | ? | 2 | 3 | 4 | 2 |
3 | 4 | 2 | 1 | ? | ? | 3 | 3 |
4 | 2 | 5 | 3 | ? | 4 | 1 | …Run Code Online (Sandbox Code Playgroud) 我有这个问题,这需要解决X在AX=B.A是15000 x 15000的顺序,是稀疏和对称的.B是15000 X 7500并且不稀疏.解决X的最快方法是什么?
我可以想到两种方式.
X = A\B使用for循环,
invA = A\speye(size(A))
for i = 1:size(B,2)
X(:,i) = invA*B(:,i);
end
Run Code Online (Sandbox Code Playgroud)有没有比上面两个更好的方法?如果没有,我提到的两者之间哪一个最好?
matlab linear-algebra sparse-matrix matrix-inverse factorization
(使用MATLAB)我有一个大的坐标矩阵和一个大的稀疏邻接矩阵,其坐标相互连接.我曾经问过SO,如何在这个SO问题中有效地计算这些距离,但我现在遇到了内存问题,这是一个更严重的问题.
我使用这个MATLAB函数来计算距离矩阵,Dists = pdist2(fruchterman_graph(:,:),fruchterman_graph(:,:),'euclidean');但它在速度和最终内存的大型网络上都失败了.
这是仅在小图表(不是数十万)上运行的代码:
coordinate = kamada_graph;
[n, d] = size(kamada_graph);
assert(d == 2);
resi = sparse(adj* spdiags((1:n)',0,n,n));
resj = sparse(spdiags((1:n)',0,n,n) * adj);
res = sparse(n,n);
f = find(adj);
res(f) = sqrt((coordinate(resi(f), 1) - coordinate(resj(f), 1)) .^ 2 +...
(coordinate(resi(f), 2) - coordinate(resj(f), 2)) .^ 2);
Run Code Online (Sandbox Code Playgroud)
这在大图上创建
??? 使用==>发现错误Matrix太大而无法返回线性索引.
使用[i,j] = find(S)用于稀疏矩阵.
在==> modularize_graphs时出错49[f] = find(adj);
我更改了被称为的行:
[i,j] = find(ajd);
res(i,j) = sqrt((coordinate(resi(i,j), 1) …Run Code Online (Sandbox Code Playgroud) 我需要计算一行的列之间的相似性,并尝试使用columnsimilarities()方法来获得结果.
public static void main(String[] args) {
SparkConf sparkConf = new SparkConf().setAppName("CollarberativeFilter").setMaster("local");
JavaSparkContext sc = new JavaSparkContext(sparkConf);
SparkSession spark = SparkSession.builder().appName("CollarberativeFilter").getOrCreate();
double[][] array = {{5,0,5}, {0,10,0}, {5,0,5}};
LinkedList<Vector> rowsList = new LinkedList<Vector>();
for (int i = 0; i < array.length; i++) {
Vector currentRow = Vectors.dense(array[i]);
rowsList.add(currentRow);
}
JavaRDD<Vector> rows = sc.parallelize(rowsList);
// Create a RowMatrix from JavaRDD<Vector>.
RowMatrix mat = new RowMatrix(rows.rdd());
CoordinateMatrix simsPerfect = mat.columnSimilarities();
RowMatrix mat2 = simsPerfect.toRowMatrix();
List<Vector> vs2 = mat2.rows().toJavaRDD().collect();
List<Vector> vs = mat.rows().toJavaRDD().collect();
System.out.println("mat"); …Run Code Online (Sandbox Code Playgroud) 我正在尝试用一个公式创建一个sparse.model.matrix(从Matrix包中),其中两个因素之间存在相互作用.如果我的输入数据有多行,这很好,但只要我有一行,我就会得到错误:
Error in model.spmatrix(t, data, transpose = transpose, drop.unused.levels = drop.unused.levels, : cannot get a slot ("Dim") from an object of type "double"
例如:这不起作用:
f<-(mpg~as.factor(cyl)*as.factor(hp))
y<-mtcars
y$cyl<-as.factor(y$cyl)
y$hp<-as.factor(y$hp)
x<-y[1,]
myMatrix<-Matrix::sparse.model.matrix(f,x)
Run Code Online (Sandbox Code Playgroud)
但是,在两行中复制x会导致错误消失:
x<-rbind(x,x)
myMatrix<-Matrix::sparse.model.matrix(f,x)
Run Code Online (Sandbox Code Playgroud)
我已经跟踪了错误
Matrix:::Csparse_vertcat/ Matrix:::Csparse_horzcatwithin Matrix:::model.spmatrix但是我无法弄清楚这个用C编写的函数正在尝试做什么.有任何想法吗?请注意,只有在我可以确定此错误时,才会在处理两个因素之间的交互的矩阵创建时发生.
sparse-matrix ×10
matrix ×4
python ×4
algorithm ×2
matlab ×2
r ×2
scipy ×2
apache-spark ×1
coordinates ×1
filesystems ×1
indices ×1
java ×1
knn ×1
linux ×1
math ×1
numpy ×1
scala ×1
svd ×1