7

A[row,col,value]ゼロ以外の値を格納するためのPythonの調整済みストレージリストがあり ます。

すべての行インデックスのリストを取得するにはどうすればよいですか?私はこれがリスト全体A[0:][0]を印刷するように機能することを期待していましたが、印刷するだけです。print A[0:]print A[0:][0]A[0]

私が尋ねる理由は、各行のゼロ以外の値の数を効率的に計算するためです。つまり、nは行range(0,n)の総数です。これは私の現在の方法よりもはるかに安いはずですfor i in range(0,n): for j in A: ...

何かのようなもの:

c = []
# for the total number of rows
for i in range(0,n):
     # get number of rows with only one entry in coordinate storage list
     if A[0:][0].count(i) == 1: c.append(i)                
return c

以上:

c = []
# for the total number of rows 
for i in range(0,n):
    # get the index and initialize the count to 0 
    c.append([i,0])
    # for every entry in coordinate storage list 
    for j in A:
        # if row index (A[:][0]) is equal to current row i, increment count  
        if j[0] == i:
           c[i][1]+=1
return c

編集:

Junuxxの回答、この質問、およびこの投稿を使用して、次のことを思いつきました(シングルトン行の数を返すため)。これは、現在の問題のサイズに対してA、元の試みよりもはるかに高速です。ただし、それでも行と列の数に応じて大きくなります。A繰り返す必要はなく、最大でできるのではないかと思いnます。

# get total list of row indexes from coordinate storage list
row_indexes = [i[0] for i in A]
# create dictionary {index:count}
c = Counter(row_indexes)    
# return only value where count == 1 
return [c[0] for c in c.items() if c[1] == 1]
4

2 に答える 2

15

これはそれを行う必要があります:

c = [x[0] for x in A]

これは、のすべての要素の最初の(サブ)要素をとるリスト内包ですA

于 2012-10-26T09:52:04.263 に答える
4

効率的で拡張されたスライスの場合は、次を使用できますnumpy。これは、例を考えると良い考えのようです。

import numpy as np
yourlist = [
    [0, 0, 0],
    [0, 1, 1],
    [1, 0, 2]
]
a = np.array(yourlist)
print a[:,0]
# [0 0 1]
bc = np.bincount(a[:,0])
# array([2, 1])
count = bc[bc==1].size
# 1
# or... (I think it's probably better...)
count = np.count_nonzero(bc == 1)
于 2012-10-26T11:14:15.533 に答える