3

ゼロではない対称 (LL[i,j] == LL[j,i]) の値について、二次 2D numpy 配列 LL を分析する必要があります。

これを行うためのループなしで、より高速で「配列のような」方法はありますか? 配列を作成せずに後で使用するために値のインデックスを格納し、すべてのループにインデックスのタプルを追加する簡単な方法はありますか?

ここで、インデックスを格納するための私の古典的なループ アプローチ:

IdxArray = np.array() # Array to store the indices
for i in range(len(LL)):
    for j in range(i+1,len(LL)):
        if LL[i,j] != 0.0:
            if LL[i,j] == LL[j,i]:
                IdxArray = np.vstack((IdxArray,[i,j]))                    

後でインデックスを使用します。

for idx in IdxArray:
    P = LL[idx]*(TT[idx[0]]-TT[idx[1]])
    ...
4

2 に答える 2

3
>>> a = numpy.matrix('5 2; 5 4')
>>> b = numpy.matrix('1 2; 3 4')
>>> a.T == b.T
matrix([[False, False],
        [ True,  True]], dtype=bool)
>>> a == a.T
matrix([[ True, False],
        [False,  True]], dtype=bool)
>>> numpy.nonzero(a == a.T)
(matrix([[0, 1]]), matrix([[0, 1]]))
于 2013-04-20T22:51:57.893 に答える
2

これはどう:

a = np.array([[1,0,3,4],[0,5,4,6],[7,4,4,5],[3,4,5,6]])

np.fill_diagonal(a, 0) # changes original array, must be careful

overlap = (a == a.T) * a
indices = np.argwhere(overlap != 0)

結果:

>>> a
array([[0, 0, 3, 4],
       [0, 0, 4, 6],
       [7, 4, 0, 5],
       [3, 4, 5, 0]])
>>> overlap
array([[0, 0, 0, 0],
       [0, 0, 4, 0],
       [0, 4, 0, 5],
       [0, 0, 5, 0]])
>>> indices
array([[1, 2],
       [2, 1],
       [2, 3],
       [3, 2]])
于 2013-04-21T00:50:47.407 に答える