Найти - Пользователи
Полная версия: Создание массива
Начало » Центр помощи » Создание массива
1
Just_for_fun
Доброе время суток.
Имеется программа
  import numpy as np
import matplotlib.pyplot as plt

data = np.genfromtxt("filepath")

A = data[:,2]/data[:,1]
C= B*A
файл представляет из себя три столбца
с н-ным количеством строк
например
0. 1. 2.3
0. 2. 3.1
0. 3. 4.5
1. 1. 0.2
1. 2. 6.1
1. 3. 7.8
т.е. у всех числе тип float
можно ли превратить данный неупорядоченный массив в такой
2.3 3.1 4.5
0.2 6.1 7.8
и как?
мои идеи иссякли на этом
for i in data[:,0]:
while data[:,0][i] == data[:,0][i-1]:
for j in data[:,1]:
A[i,j] = data[:,2][j]
что-то не очень вышло.
просто в дальнейшем планировал работать с таким массивом и получать граф. изображение его, напр. типа contour и т.п.
doza_and
matplotlib работает с numpy массивами для них транспонирование
a.T
Just_for_fun
Хм, либо я Вас не понял либо Вы меня.
У меня программа считывает файл, в котором три столбца. И производит нехитрую операцию деления одного столбца на другой.
В итоге у меня три линейных массива. Но так вышло, что первый и второй столбцы файла data и data - это индексы строк и столбцов квадратной матрицы соотв. Значениями является третий линейный массив.
Вся суть вопроса - как собрать матрицу, или 2D массив из того что есть.
pyuser
Если Вы не уверены в порядке строк в файле то можно так:
(я специально изменил порядок строк)
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)]
doza_and
Это я не понял сразу
почемубы вам не воспользоваться 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
Извините если опять неправильно понял
Just_for_fun
doza_and, спасибо большое!
Вот это именно то что мне нужно. Благодарю также за наводку на scipy.sparce, я почему-то думал что это исключительно для различных алгебраических задач и проч. Как я понял, это вот эта матрица scipy.sparse.coo_matrix

pyuser, спасибо за помощь и отзывчивость!
К сожалению в силу своей малой грамотности и по некоторым причинам, лучшего понимания императивного стиля, в ваших функциях мне сложно разобраться.
Но это уже лично моя необразованность.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB