1

マトリックスのようにフォーマットされた.txtファイルをPythonグリッドに使用しようとしています。

グリッドを作成するために使用しているクラスは次のとおりです。

class Grid(object):
"""Represents a two-dimensional array."""

    def __init__(self, rows, columns, fillValue = None):
        self._data = Array(rows)
        for row in xrange(rows):
            self._data[row] = Array(columns, fillValue)

    def getHeight(self):
        """Returns the number of rows."""
        return len(self._data)

    def getWidth(self):
        "Returns the number of columns."""
        return len(self._data[0])

    def __getitem__(self, index):
        """Supports two-dimensional indexing with [][]."""
        return self._data[index]

    def __str__(self):
        """Returns a string representation of the grid."""
        result = ""
        for row in xrange(self.getHeight()):
            for col in xrange(self.getWidth()):
                result += str(self._data[row][col]) + " "
            result += "\n"
        return result

Array と呼ばれる別のクラスを使用して、1D 配列を構築し、それを 2D 配列にします。コード:Grid(10, 10, 1)は、グリッド内のすべての数値が 1 である 10 行 10 列の 2D 配列を返します。

ここに配列クラスがあります

class Array(object):
"""Represents an array."""

def __init__(self, capacity, fillValue = None):
    """Capacity is the static size of the array.
    fillValue is placed at each position."""
    self._items = list()
    for count in xrange(capacity):
        self._items.append(fillValue)

def __len__(self):
    """-> The capacity of the array."""
    return len(self._items)

def __str__(self):
    """-> The string representation of the array."""
    return str(self._items)

def __iter__(self):
    """Supports traversal with a for loop."""
    return iter(self._items)

def __getitem__(self, index):
    """Subscript operator for access at index."""
    return self._items[index]

def __setitem__(self, index, newItem):
    """Subscript operator for replacement at index."""
    self._items[index] = newItem

1 を、次のようなテキスト ファイルの値にしたい:

9 9
1 3 2 4 5 2 1 0 1
0 7 3 4 2 1 1 1 1 
-2 2 4 4 3 -2 2 2 1
3 3 3 3 1 1 0 0 0
4 2 -3 4 2 2 1 0 0
5 -2 0 0 1 0 3 0 1
6 -2 2 1 2 1 0 0 1
7 9 2 2 -2 1 0 3 2
8 -3 2 1 1 1 1 1 -2

9,9 は、行列の行と列を表します。リストを使用できる唯一の場所はreadline().split()、最初の行をリストに変換するメソッドです。

もちろん、セリフはあります。

m = open("matrix.txt", "r")
data = m.read

ここで、データはフォルダーからフォーマットされた文字列表現で数値を返しますが、各数値を個別に返し、それをグリッド内のセルに設定する方法が必要です。何か案は?

編集:私の現在のコード:

g = map(int, m.readline().split())
data = m.read()
matrix = Grid(g[0], g[1], 1)

g[0] と g[1] は、行と列の変数を持つリストからのものです。このように、同じ形式に従うすべての .txt ファイルは、最初の行が行と列の変数になります。リストを使用せずに、残りのデータで「1」を置き換える方法を見つけようとしています。

4

3 に答える 3

4

これはどのように見えますか:

with open('matrix.txt') as f:
    grid_data = [i.split() for i in f.readlines()]

これにより、ファイルから各配列が読み取られ、値のリストにフォーマットされます。

お役に立てれば!

于 2013-04-24T04:07:39.857 に答える
1
import numpy
a_width = 9
a_height = 9
data_file = "matrix.dat"

a = numpy.array(open(data_file).read().split(),dtype=int).reshape((a_width,a_height))
#or another alternative below
a = numpy.fromfile("matrix.dat",dtype=int,sep=" ").reshape(9,9)

print a

別の解決策

with open(data_file) as f:
    a = map(str.split,f)

print a

これは Nick Burns Code のもう少し簡潔なバージョンです

于 2013-04-24T04:04:35.293 に答える
0

A SUPER SIMPLE answer (以前の回答よりもはるかに単純であるため、新しい回答を追加しました)

# create a grip object
new_matrix = Grid(9, 9)

with open('matrix.txt') as f:
    # loop through the data
    for i, line in enumerate(f.readlines()):
        line = line.split()

        # populate the new_matrix
        for j, value in enumerate(line):
            new_matrix[i][j] = value

これが Grid クラスを使用してマトリックスを設定するのが気に入っています。ファイルからのデータの読み込みを除いて、リストは使用されません。

たどり着いた(願っている、そう思っている!)

于 2013-04-24T05:41:31.703 に答える