3

次のようなマトリックスを構築したい:

    Col1 Col2 Col3 Coln
row1  1    2    4    2     
row2  3    8    3    3
row3  8    7    7    3
rown  n    n    n    n

リストのリストがどのように組み立てられるかを述べているPythonドキュメントにはまだ何も見つかりません。

a = [[1,2,4,2],[3,8,3,3],[8,7,7,3],[n,n,n,n]]

各行がリスト項目である場合、または各列がリスト項目である必要がある場合:

b = [[1,3,8,n],[2,8,7,n],[4,3,7,n],[2,3,3,n]]

これはよくある質問だと思いますが、ストレートな答えが見つからないようです。

ドキュメントに基づいて、単純にこれを numpy 配列に変換できると推測しています。

np.array(a)

誰でも助けることができますか?

4

4 に答える 4

4

最初のバージョンが必要です:

a = [[1,2,4,2],[3,8,3,3],[8,7,7,3],[n,n,n,n]]

行列の要素にアクセスする場合、通常は を使用しますmatrix[row][col]。したがって、上記の Python リスト形式では、a[i]row が返され、i 番目の行から j 番目の要素が返されます。ia[i][j]

それをnumpy配列に変換するnp.array(a)のが正しい方法です。

于 2013-03-04T17:15:37.543 に答える
1

最初の規則を使用します。転置が必要な場合:

>>> a = [[1,2,4,2],[3,8,3,3],[8,7,7,3],['n','n','n','n']]
>>> trans=[]
>>> for i in range(len(a)):
...    trans.append([row[i] for row in a])
... 
>>> trans
[[1, 3, 8, 'n'], [2, 8, 7, 'n'], [4, 3, 7, 'n'], [2, 3, 3, 'n']]

要素はa[row][col]vsですtrans[col][row]aあなたの例に関して)

最初の規則は Python で使用されます。これは、レイアウト時に最初の規則を使用する必要がある理由を簡単に理解できます。

a = [[1,2,4,2],
     [3,8,3,3],
     [8,7,7,3],
     ['n','n','n','n']]

確かに、numpy を使用する場合は、numpy で使用されるため、最初の規則を使用します。

>>> np.array(a)
array([['1', '2', '4', '2'],
       ['3', '8', '3', '3'],
       ['8', '7', '7', '3'],
       ['n', 'n', 'n', 'n']], 
      dtype='|S1')
>>> np.array(trans)
array([['1', '3', '8', 'n'],
       ['2', '8', '7', 'n'],
       ['4', '3', '7', 'n'],
       ['2', '3', '3', 'n']], 
      dtype='|S1')

注:'n'最後の行/列にあるため、numpyはintを文字列に変換します。

その表を実際に印刷し始めるときは、次の方法があります。

def pprint_table(table):
    def format_field(field, fmt='{:,.0f}'):
        if type(field) is str: return field
        if type(field) is tuple: return field[1].format(field[0])
        return fmt.format(field)     

    def get_max_col_w(table, index):
        return max([len(format_field(row[index])) for row in table])         

    col_paddings=[get_max_col_w(table, i) for i in range(len(table[0]))]
    for i,row in enumerate(table):
        # left col
        row_tab=[row[0].ljust(col_paddings[0])]
        # rest of the cols
        row_tab+=[format_field(row[j]).rjust(col_paddings[j]) for j in range(1,len(row))]
        print(' '.join(row_tab))                

pprint_table([
        ['','Col 1', 'Col 2', 'Col 3', 'Col 4'],
        ['row 1', '1','2','4','2'],
        ['row 2','3','8','3','3'],
        ['row 3','8','7','7','3'],
        ['row 4', 'n','n','n','n']]) 

版画:

      Col 1 Col 2 Col 3 Col 4
row 1     1     2     4     2
row 2     3     8     3     3
row 3     8     7     7     3
row 4     n     n     n     n
于 2013-03-04T17:21:39.520 に答える
1

これ: a = [[1,2,4,2],[3,8,3,3],[8,7,7,3],[n,n,n,n]] 必要なリストが作成されます。はい、np.array(a) はそれを numpy 配列に変換します。

mまた、これは、行とn列を持つ配列を作成する (そしてすべての要素を 0 に設定する)ことであった「pythonish」です。

a = [[0 for i in range(n)] for j in range(m)]

于 2013-03-04T17:14:53.860 に答える
1

「マトリックス」について言及したので、 np.matrix() オプションもあると付け加えておきます。

例:使用できます

A = [[1,2,3],[4,5,6],[7,8,9]]

各内部リストが行を表すリスト (リストの) を作成します。

それで

AA = np.array(A)

行列の外観を持つ 2D 配列を作成しますが、行列のすべてのプロパティではありません。

一方

AM = np.matrix(A)

マトリックスを作成します。

これら 2 つで算術演算を実行すると、違いがわかります。例えば

AA**2

2D 配列の各要素を 2 乗します。でも

AM**2

AM の行列乗算を単独で実行します。

ところで。上記の使用法は、もちろん「numpy を np としてインポートする」ことを前提としています。

于 2013-03-04T17:28:17.680 に答える