Gin*_*ger 7 python arrays numpy scipy sparse-matrix
我有一个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日的最新消息:我已经有了一些想法,想出了这个,这与我上周描述的几乎相同:
m您可以通过定义一个包含and的类来接近您想要的内容c:
import numpy as np
class O(object):
def __init__(self, m, c):
self.m, self.c = m, c
def vals(self, i):
return self.m[i][self.m[i]!=0]
def cols(self, i):
return self.c[self.m[i]!=0]
m = np.array([[4, 0, 9, 0],
[0, 7, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 5]])
c = np.array([ 10, 20, 30, 40])
o = O(m, c)
for i in range(4):
print 'o.vals({0:d}) = {1}'.format(i, o.vals(i))
for i in range(4):
print 'o.cols({0:d}) = {1}'.format(i, o.cols(i))
Run Code Online (Sandbox Code Playgroud)
返回:
o.vals(0) = [4 9]
o.vals(1) = [7]
o.vals(2) = []
o.vals(3) = [5]
o.cols(0) = [10 30]
o.cols(1) = [20]
o.cols(2) = []
o.cols(3) = [40]
Run Code Online (Sandbox Code Playgroud)
m[i][m[i]!=0(不过,直接使用索引可能更容易c[m[i]!=0]。)