Форум сайта python.su
Доброе время суток.
Имеется программа
import numpy as np
import matplotlib.pyplot as plt
data = np.genfromtxt("filepath")
A = data[:,2]/data[:,1]
C= B*A
for i in data[:,0]:
while data[:,0][i] == data[:,0][i-1]:
for j in data[:,1]:
A[i,j] = data[:,2][j]
Офлайн
matplotlib работает с numpy массивами для них транспонирование
a.T
Офлайн
Хм, либо я Вас не понял либо Вы меня.
У меня программа считывает файл, в котором три столбца. И производит нехитрую операцию деления одного столбца на другой.
В итоге у меня три линейных массива. Но так вышло, что первый и второй столбцы файла data и data - это индексы строк и столбцов квадратной матрицы соотв. Значениями является третий линейный массив.
Вся суть вопроса - как собрать матрицу, или 2D массив из того что есть.
Офлайн
Если Вы не уверены в порядке строк в файле то можно так:
(я специально изменил порядок строк)
DATA = """
1. 1. 0.2
0. 2. 3.1
0. 1. 2.3
1. 3. 7.8
1. 2. 6.1
0. 3. 4.5
""".strip()
def parse_slow(data):
data = data.split("\n")
result = [[.0 for j in range(3)] for i in range(len(data) // 3)]
for row, col, value in (l.split() for l in data):
result[int(row[:-1])][int(col[:-1]) - 1] = float(value)
return result
DATA = """
0. 1. 2.3
0. 2. 3.1
0. 3. 4.5
1. 1. 0.2
1. 2. 6.1
1. 3. 7.8
""".strip()
def parse_fast(data):
data = [float(value) for _, _, value in (l.split() for l in data.split("\n"))]
return [data[i:i+3] for i in range(0, len(data), 3)]
Офлайн
Это я не понял сразу
почемубы вам не воспользоваться scipy.sparce
там есть матрица в координатном формате - ей кормите свои массивы а потом делаете из нее заполненную.
или просто
import numpy as np
import matplotlib.pyplot as plt
data = np.genfromtxt("fil.dat")
ny=np.max(data[:,0])+1
nx=np.max(data[:,1])+1
A=np.zeros((ny,nx))
for i,j,v in data:
A[i,j]=v
Отредактировано (Дек. 1, 2011 20:23:46)
Офлайн
doza_and, спасибо большое!
Вот это именно то что мне нужно. Благодарю также за наводку на scipy.sparce, я почему-то думал что это исключительно для различных алгебраических задач и проч. Как я понял, это вот эта матрица scipy.sparse.coo_matrix
pyuser, спасибо за помощь и отзывчивость!
К сожалению в силу своей малой грамотности и по некоторым причинам, лучшего понимания императивного стиля, в ваших функциях мне сложно разобраться.
Но это уже лично моя необразованность.
Офлайн