这是什么类型的Python数组?它是否已经存在于Python中?

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日的最新消息:我已经有了一些想法,想出了这个,这与我上周描述的几乎相同:

xnx*_*xnx 3

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]。)