在scipy中,当我将稀疏矩阵的一部分与只包含零的数组相乘时,结果是一个比以前少或同样稀疏的矩阵,尽管它应该是更多或同样稀疏的。将矩阵的部分设置为0或False的情况也是相同的:
>>> import numpy as np
>>> from scipy.sparse import csr_matrix as csr
>>> M = csr(np.random.random((8,8))>0.9)
>>> M
<8x8 sparse matrix of type '<type 'numpy
我有一个非常大的稀疏Numpy矩阵(类型为numpy.ndarray)。矩阵太大了,很可能必须存储在虚拟内存中。如何有效地将其转换为稀疏的枕木矩阵(来自scipy.sparse)(用于算术操作)?
下面是dok_matrix的直接转换,这可能是由于内存问题而失败的。将dok_matrix更改为csr_matrix会导致相同的内存问题。
In [1]: N=int(1e6)
In [2]: from scipy.sparse import dok_matrix
In [3]: import numpy as np
In [4]: mat=np.zeros((N,N))
In [5]: d
我有一个大的枕木稀疏矩阵,占我系统总内存的90%以上。我想把它保存到磁盘上,因为构建矩阵需要几个小时.
我试过cPickle,但那会导致记忆爆炸.
import numpy as np
from scipy.sparse import lil_matrix
import cPickle
dim = 10**8
M = lil_matrix((dim, dim), dtype=np.float)
with open(filename, 'wb') as f:
cpickle.dump(M, f) # leads to a major memory explosio
我正在处理一个2D矩阵并找到元素之和,下面是我的逻辑:
def calculateSum(a, x, y):
s = 0;
for i in range(0,x+1):
for j in range(0,y+1):
s = s + a[i][j];
print(s)
return s
def check(a):
arr = []
x = 0
y = 0
for i in range(len(a)):
row = []
y = 0
for j i
我被要求在二维数组/矩阵(行、列)中试验numpy计算值,其中这些值依赖于相邻的值。我承认,这不仅仅是将矩阵与标量或诸如此类的矩阵相乘,即使它可能被简化为一系列这样的步骤。
尽管这是家庭作业,但我的问题所涉及的范围比仅仅向我提出解决办法的范围更广。
我已经阅读了广播,即向量化,在numpy,我可以想象一种方式是实现这作为一个新的ufunc,并运行它的矩阵。但是,对于我可能面临的限制,我有点担心--与当前迭代期间计算的元素相比,numpy ufunc可以访问相邻元素吗?概念上:
for x in columns:
for y in rows:
a[x, y] = a[x,
a = numpy.zeros((17770,5))
b = numpy.zeros((5,20000))
ma = numpy.matrix(a)
mb = numpy.matrix(b)
就是ma.shape = (17770,5),mb.shape = (5,20000),都是numpy.matrix。
我需要ma*mb。但是我得到了错误消息"ValueError: array is too big"。
这些矩阵对于Python乘法是不是太大了?
顺便说一句,我使用python2.6.6/32bit/3 3GB进行了测试
我是从问题开始构建的。我正在使用发布在那里的解决方案重新绑定一个numpy数组,并为额外的部分添加一个小的附加项:
from numpy import arange,append
x = arange(20)
x = x[:(x.shape[0]/bin)*bin].reshape((x.shape[0]//bin,-1)).mean(1)
x= append(x,x[(x.shape[0]/bin)*bin:].mean())
这是为了处理x.shape[0]的非除数桶。append将剩余单元格的平均值相加。问题是,我在这里做了很多数组,除了内存之外,这不可能是运行时高效的。有更好的办法
numpy矩阵的最大元素/情况是什么,或者numpy矩阵的最大大小是多少?
上面的代码在变量矩阵size...so上返回内存错误,它依赖于什么环境(可用内存的顺序数量?)?
for ret in xrange(5000,7000,50):
res = []
for x in xrange(ret):
temp=[]
for y in xrange(ret):
temp.append(random.random())
res.append(temp)
print "r"
r = numpy.m
我有一个名为MEL of shape (94824 )的数据集,其中大多数实例都具有形状(99,13),但有些实例的形状较小。它由(浮动) MEL频率组成。我试着把所有的值都放在一个空的数字矩阵中(94824,99,13)。所以有些实例是空的。有什么建议吗?
MEL type = numpy.ndarray
for i in MEL type(i) = <class 'numpy.ndarray'>
for j in i type (j) = <class 'numpy.ndarray'>
我是来自matlab的python新手。我有一个很大的稀疏矩阵保存为matlab v7.3 (HDF5)格式。到目前为止,我已经找到了两种在文件中加载的方法,使用h5py和tables。然而,无论在哪一种情况下,对矩阵的操作似乎都非常慢。例如,在matlab中:
>> whos
Name Size Bytes Class Attributes
M 11337x133338 77124408 double sparse
>> tic, s
在下面的示例中,我创建了一个带有零的大numpy对象,在对角线上放置一个随机数,然后转换为scipy稀疏矩阵。我对内存使用情况的报告来自任务管理器。
>>> import sys, random
>>> import numpy as np
>>> from scipy import sparse
## Memory in use at this point: 3.1 Gb
>>> m = np.zeros(shape = (40000, 40000), dtype = float)
>>> sys.ge
我正在处理减去稀疏矩阵的问题。不幸的是,如果一些单元格在减去后等于0-它就消失了。 我所期望的是它存储在元素中,但是值为零。 一些过于简单的例子: import scipy.sparse as sparse
import numpy as np
row = np.array([0, 1])
col = np.array([0, 1])
data = np.array([1 ,1])
sample_csr=sparse.csr_matrix((data, (row, col)))
display(sample_csr-sample_csr) # what I have
display(samp
我必须计算矩阵(二维数组)中大于200的所有值。
我为此写下的代码是:
za=0
p31 = numpy.asarray(o31)
for i in range(o31.size[0]):
for j in range(o32.size[1]):
if p31[i,j]<200:
za=za+1
print za
o31是一个图像,我将它转换成一个矩阵,然后找到值。
我的问题是,有没有更简单的方法来做到这一点?
我必须创建一个用户和电视节目的邻接列表,其中行是用户,电视节目是列。如果用户关注那个电视节目,那么矩阵中就会有1,否则是零。这是我从twitter上收集到的信息。总共有140个电视节目和大约530000的独特用户。我使用以下代码生成矩阵,使用python:
NoTvShows:电视节目总数(ID)
unique_user:所有唯一的用户
collected_users:这是一个列表。子列表对应于电视节目,并列出追随者的ID。
for i in range(0,NoTvShows):
for every_user in unique_users:
if