我正在尝试对包含外部的文件夹进行稀疏检查,但没有任何外部检查.这个问题似乎表明这种行为可能是设计的,或者至少是不清楚行为应该是什么.从我的观点来看,显而易见的行为是外部被视为与任何其他目录一样,并且遵循相同的稀疏结账规则进行检查.
有没有办法解决这个问题,除了手动检查外部?
我正在进行电力系统分析程序,我需要使用稀疏矩阵.
有一个例程,我只需要通过以下调用填充稀疏矩阵:
self.A = bsr_matrix((val, (row,col)), shape=(nele, nbus), dtype=complex)
Run Code Online (Sandbox Code Playgroud)
因为这个矩阵不会随着时间而改变.另一个矩阵确实会随着时间而改变,我需要更新它.有没有办法,例如:
co = [ 2, 3, 6]
row = [ 5, 5, 5]
val = [ 0.1 + 0.1j, 0.1 - 0.2j, 0.1 - 0.4j]
Run Code Online (Sandbox Code Playgroud)
我可以将它们添加到先前初始化的稀疏矩阵中吗?怎么会有更多的pythonic方式呢?
谢谢
我有类的对象,big.matrix在R与尺寸778844 x 2.值均为整数(千米).我的目标是使用并计算欧几里德距离矩阵,big.matrix并将其作为类的对象big.matrix.我想知道是否有最佳方法.
我选择使用该类的原因big.matrix是内存限制.我可以将我转换big.matrix为类的对象matrix并使用计算欧几里德距离矩阵dist().但是,dist()将返回一个不会在内存中分配的大小的对象.
编辑
以下答案由bigmemory包装的作者和维护者John W. Emerson给出:
您可以使用我期望的大代数,但这对于Rcpp来说也是一个非常好的用例来源于sourceCpp(),非常简短.但简而言之,我们甚至不尝试提供高级功能(除了我们作为概念验证实现的基础知识).一旦你开始谈论内存不足,没有一种算法可以涵盖所有用例.
我有一个数据框,大部分是零(稀疏数据帧?)类似于
name,factor_1,factor_2,factor_3
ABC,1,0,0
DEF,0,1,0
GHI,0,0,1
Run Code Online (Sandbox Code Playgroud)
实际数据大约是90,000行,包含10,000个功能.我可以将其转换为稀疏矩阵吗?我期望通过利用稀疏矩阵而不是数据帧来获得时间和空间效率.
任何帮助,将不胜感激
更新#1:这是生成数据帧的一些代码.谢谢理查德提供这个
x <- structure(list(name = structure(1:3, .Label = c("ABC", "DEF", "GHI"),
class = "factor"),
factor_1 = c(1L, 0L, 0L),
factor_2 = c(0L,1L, 0L),
factor_3 = c(0L, 0L, 1L)),
.Names = c("name", "factor_1","factor_2", "factor_3"),
class = "data.frame",
row.names = c(NA,-3L))
Run Code Online (Sandbox Code Playgroud) 我已经尝试初始化csc_matrix并csr_matrix从(data, (rows, cols))文档建议的值列表中进行初始化.
sparse = csc_matrix((data, (rows, cols)), shape=(n, n))
Run Code Online (Sandbox Code Playgroud)
问题是,我实际上有用于产生方法data,rows和cols载体引入重复对一些点.默认情况下,scipy会添加重复条目的值.但是,在我的情况下,这些重复项data对于给定的值具有完全相同的值(row, col).
我想要实现的是让scipy忽略第二个条目,如果已经存在,而不是添加它们.
忽略我可以改进生成算法以避免生成重复的事实,是否有参数或其他方法来创建忽略重复的稀疏矩阵?
目前两个条目与data = [4, 4]; cols = [1, 1]; rows = [1, 1];生成的稀疏矩阵,其值在(1,1)是8同时所希望的值是4.
>>> c = csc_matrix(([4, 4], ([1,1],[1,1])), shape=(3,3))
>>> c.todense()
matrix([[0, 0, 0],
[0, 8, 0],
[0, 0, 0]])
Run Code Online (Sandbox Code Playgroud)
我也知道我可以通过使用二维numpy unique函数来过滤它们,但是列表非常大,所以这不是一个真正有效的选项.
问题的其他可能答案:有没有办法指定如何处理重复项?即保持min或max代替默认sum?
我有一个numpy数组:
m = array([[4, 0, 9, 0],
[0, 7, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 5]])
Run Code Online (Sandbox Code Playgroud)
m列的4列标记为:
c = array([ 10, 20, 30, 40])
Run Code Online (Sandbox Code Playgroud)
我希望能够切割一个对象o:
o.vals[0,:] = array([4, 9])
o.vals[1,:] = array([7,])
o.vals[2,:] = array([])
o.vals[3,:] = array([5])
o.cols[0,:] = array([10, 30] )# the non-zero column labels from row 0
o.cols[1,:] = array([20,])
o.cols[2,:] = array([])
o.cols[3,:] = array([40])
Run Code Online (Sandbox Code Playgroud)
是否有现成的Python对象可以让我这样做?
我看过Scipy Sparse Matrices,但它并不是我想要的.
2015年8月17日的最新消息:我已经有了一些想法,想出了这个,这与我上周描述的几乎相同:
我在C++中使用Eigen中的稀疏矩阵.我想读取存储在特定行和列索引中的数据,就像我使用常规特征矩阵一样.
std::vector<Eigen::Triplet<double>> tripletList;
// TODO: populate triplet list with non-zero entries of matrix
Eigen::SparseMatrix<double> matrix(nRows, nCols);
matrix.setFromTriplets(tripletList.begin(), tripletList.end());
// TODO: set iRow and iCol to be valid indices.
// How to read the value at a specific row and column index?
// double value = matrix(iRow, iCol); // Compiler error
Run Code Online (Sandbox Code Playgroud)
我该如何进行这种索引操作?
我有两个大的稀疏矩阵:
In [3]: trainX
Out[3]:
<6034195x755258 sparse matrix of type '<type 'numpy.float64'>'
with 286674296 stored elements in Compressed Sparse Row format>
In [4]: testX
Out[4]:
<2013337x755258 sparse matrix of type '<type 'numpy.float64'>'
with 95423596 stored elements in Compressed Sparse Row format>
Run Code Online (Sandbox Code Playgroud)
加载总共大约5 GB RAM.请注意,这些矩阵非常稀疏(占用0.0062%).
对于每一行testX,我想找到的最近邻trainX,返回其相应的标签,在发现trainY. trainY是一个长度相同的列表,trainX并且有许多类.(一个类由1-5个单独的标签组成,每个标签是20,000个中的一个,但是类的数量与我现在要做的事情无关.)
我正在使用sklearnKNN算法来做到这一点:
from sklearn import neighbors
clf = neighbors.KNeighborsClassifier(n_neighbors=1)
clf.fit(trainX, trainY)
clf.predict(testX[0])
Run Code Online (Sandbox Code Playgroud)
甚至预测1项testX需要一段时间(即30-60秒之类的东西,但如果你乘以200万,那就变得非常不可能了).我的笔记本电脑有16GB的RAM开始交换一下,但确实设法完成了1项testX.
我的问题是,我怎么能这样做才能在合理的时间内完成?在大型EC2实例上说一晚?只是拥有更多的内存并防止交换速度足够快(我的猜测是否定的).也许我可以以某种方式利用稀疏性来加速计算?
谢谢.
说我想从a中删除对角线scipy.sparse.csr_matrix.这样做有效吗?我在sparsetools模块中看到有C返回对角线的功能.
def csr_setdiag_val(csr, value=0):
"""Set all diagonal nonzero elements
(elements currently in the sparsity pattern)
to the given value. Useful to set to 0 mostly.
"""
if csr.format != "csr":
raise ValueError('Matrix given must be of CSR format.')
csr.sort_indices()
pointer = csr.indptr
indices = csr.indices
data = csr.data
for i in range(min(csr.shape)):
ind = indices[pointer[i]: pointer[i + 1]]
j = ind.searchsorted(i)
# matrix has only elements up until diagonal …Run Code Online (Sandbox Code Playgroud) 如何以简单的一行代码(并且快速!)列出 a 的所有非零元素csr_matrix?
我正在使用这段代码:
edges_list = list([tuple(row) for row in np.transpose(A.nonzero())])
weight_list = [A[e] for e in edges_list]
Run Code Online (Sandbox Code Playgroud)
但执行起来需要相当长的时间。
sparse-matrix ×10
python ×6
scipy ×4
numpy ×3
matrix ×2
r ×2
arrays ×1
bigdata ×1
c++ ×1
dataframe ×1
diagonal ×1
duplicates ×1
eigen ×1
indexing ×1
r-bigmemory ×1
scikit-learn ×1
svn ×1