我有两个大型矩阵需要繁殖:
A x D
其中A = 2358048 x 1 B = 1 x 492020
我知道乘法需要大量的RAM,这就是为什么我在matlab中得到Out of Memory(我在服务器上有90GB的RAM).
有几种方法可以做到这一点.也许分解一些如何并保存一些文件中的碎片并逐步进行乘法运算.然后最后将它们组合在一起?样本matlab代码将是最有价值的.谢谢
matlab matrix out-of-memory sparse-matrix matrix-multiplication
如果你有一个稀疏矩阵X:
>> print type(X)
<class 'scipy.sparse.csr.csr_matrix'>
Run Code Online (Sandbox Code Playgroud)
...如何将每行中每个元素的平方相加,并将它们保存到列表中?例如:
>>print X.todense()
[[0 2 0 2]
[0 2 0 1]]
Run Code Online (Sandbox Code Playgroud)
如何将其转换为每行的平方和列表:
[[0²+2²+0²+2²]
[0²+2²+0²+1²]]
Run Code Online (Sandbox Code Playgroud)
要么:
[8, 5]
我想在MATLAB中创建一个随机邻接矩阵,使得权重的总和等于边数.最后找到拉普拉斯矩阵
L = diag(sum(A)) - A
Run Code Online (Sandbox Code Playgroud)
然后绘制图形.有没有办法这样做?提前致谢.
我正在计算scipy.sparse矩阵(CSC)和numpy ndarray向量之间的点积:
>>> print type(np_vector), np_vector.shape
<type 'numpy.ndarray'> (200,)
>>> print type(sp_matrix), sparse.isspmatrix(sp_matrix), sp_matrix.shape
<class 'scipy.sparse.csc.csc_matrix'> True (200, 200)
>>> dot_vector = dot(np_vector, sp_matrix)
Run Code Online (Sandbox Code Playgroud)
结果似乎是一个新的ndarray矢量,正如我所料:
>>> print type(dot_vector), dot_vector.shape
<type 'numpy.ndarray'> (200,)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试向该向量添加标量时,我收到异常:
>>> scalar = 3.0
>>> print dot_vector + scalar
C:\Python27\lib\site-packages\scipy\sparse\compressed.pyc in __add__(self, other)
173 return self.copy()
174 else: # Now we would add this scalar to every element.
--> 175 raise NotImplementedError('adding a nonzero scalar to a '
176 'sparse matrix is not supported')
177 elif isspmatrix(other): …Run Code Online (Sandbox Code Playgroud) 我正在寻找numpy.where与scipy offers(scipy.sparse)的稀疏表示一起使用的等价物.是否有任何东西可以让你处理这些矩阵,就好像你在哪里使用if-then-else语句一样?
UPDATE
更具体:我需要where一个IF-THEN-ELSE vectorialized功能,即在这样的任务,因为这等于K的矩阵A的每个值,放在矩阵B对应的值,否则C.你可以使用类似find来检索满足逻辑条件的那些条目的索引,然后否定它们以找到所有剩余的条目,但对于稀疏矩阵,是不是有更紧凑的方法?
我不确定是否xgboost可以按照我需要的方式(?)组合许多不错的功能,但我要做的是在多类因变量上运行具有稀疏数据预测变量的随机森林.
我知道xgboost可以做其中任何一件事:
xgboost参数:bst <- xgboost(data = train$data, label = train$label, max.depth = 4, num_parallel_tree = 1000, subsample = 0.5, colsample_bytree =0.5, nround = 1, objective = "binary:logistic")
bst <- xgboost(data = sparse_matrix, label = output_vector, max.depth = 4,
eta = 1, nthread = 2, nround = 10,objective = "binary:logistic")
multi:softmax或multi:softprobxgboost(data = data, label = multinomial_vector, max.depth = 4,
eta = 1, nthread = 2, nround = …
我试图获得一个特定字典值的向量,这些值在一个numpy数组中.这是数组的样子:
import numpy as np
edge_array = np.array(
[[1001, 7005, {'lanes': 9, 'length': 0.35, 'type': '99', 'modes': 'cw'}],
[1001, 8259, {'lanes': 10, 'length': 0.46, 'type': '99', 'modes': 'cw'}],
[1001, 14007, {'lanes': 7, 'length': 0.49, 'type': '99', 'modes': 'cw'}]])
Run Code Online (Sandbox Code Playgroud)
我对每行(即的前两个值的向量1001和7005,但我需要用于与相关联的值的另一种载体'lanes'.
到目前为止,这是我的代码:
row_idx = edge_array[:, 0]
col_idx = edge_array[:, 1]
lane_values = edge_array[:, 2['lanes']]
Run Code Online (Sandbox Code Playgroud)
我得到的错误如下:
lane_values = edge_array[:, 2['lanes']]
TypeError: 'int' object has no attribute '__getitem__'
Run Code Online (Sandbox Code Playgroud)
如果您需要进一步澄清,请告诉我,谢谢!
我有一个包含一些NA元素的矩阵(例如mat下面),我想创建一个新函数,用NA隐藏的值打印它(fun如下所示).我怎样才能做到这一点?
mat <- cbind(c(1,2,NA,NA),c(3,3,3,NA),c(NA,4,4,4),c(NA,NA,5,5))
print(mat)
[,1] [,2] [,3] [,4]
[1,] 1 3 NA NA
[2,] 2 3 4 NA
[3,] NA 3 4 5
[4,] NA NA 4 5
fun(mat)
[,1] [,2] [,3] [,4]
[1,] 1 3
[2,] 2 3 4
[3,] 3 4 5
[4,] 4 5
Run Code Online (Sandbox Code Playgroud) 我有一个非常大的稀疏csc_matrix x.我想对它进行elementwise exp().基本上我想要的是得到与我一样的结果numpy.exp(x.toarray()).但我不能那样做(我的记忆不允许我将稀疏矩阵转换成数组).有什么出路吗?提前致谢!
我很难弄清楚什么是最有效的方法来执行以下操作:
import numpy as np
M = 10
K = 10
ind = np.array([0,1,0,1,0,0,0,1,0,0])
full = np.random.rand(sum(ind),K)
output = np.zeros((M,K))
output[1,:] = full[0,:]
output[3,:] = full[1,:]
output[7,:] = full[2,:]
Run Code Online (Sandbox Code Playgroud)
我想构建输出,它是一个稀疏矩阵,其行以密集矩阵(完整)给出,行索引通过二进制矢量指定。理想情况下,我想避免循环。那可能吗?如果没有,我正在寻找最有效的方法。
我需要多次执行此操作。ind和full会不断变化,因此,我仅提供了一些示例值进行说明。我希望ind相当稀疏(最多10%),M和K都很大(10e2-10e3)。最终,我可能需要在pytorch中执行此操作,但是对于numpy来说,一些不错的过程已经使我步入正轨。
如果您对此问题有一个或多个适当的类别,也请帮助我找到该问题的更适当的标题。
非常感谢,马克斯
sparse-matrix ×10
numpy ×5
python ×5
scipy ×4
matlab ×2
matrix ×2
r ×2
dictionary ×1
exponential ×1
indexing ×1
ipython ×1
na ×1
random ×1
slice ×1
xgboost ×1