«матрица» проблема питона - PullRequest
0 голосов
/ 26 марта 2011

У меня есть входные данные (test.data)

4.5,3.5,U1
4.5,10.5,U2
4.5,6,U1
3.5,10.5,U2
3.5,10.5,U2
5,7,U1
7,6.5,U1

код у меня есть:

import csv

reader = csv.reader(open('test.data', 'r'))
result = {}
for row in reader:
    uclass=row[-1]
    if result.has_key(uclass):
        result[uclass].append(row[:-1])
    else:
        result[uclass] = row[:-1]
print result

Теперь мой вывод:

'U1': 
[['4.5', '3.5]', 
['4.5', '6'], 
['5', '7'], 
['7', '6.5'], 

'U2': 
[['4.5', '10.5'], 
['3.5', '10.5'], 
['3.5', '10.5']]

Где U1 и U2 .... это класс


СЕЙЧАС МОЯ ПРОБЛЕМА: Как я могу теперь сделать для цикла (или что-нибудь еще), где я могу назвать это U1, U2, .... (мои классы из данных) и получать данные.

В данном случае мне нравится:

first1 = 1/3 * U1 (1/3 of data U1) = ?
first2 = 1/3 * U2 (1/3 of data U2) = ?
second1 = 2/3 * U2 (2/3 of data U1) = ?
second2 = 2/3 * U2 (2/3 of data U2) = ?

Мне нужна эта матрица (first1, first2, second1, second2) для следующего расчета ...

Ответы [ 2 ]

2 голосов
/ 27 марта 2011

В программировании, если вы не знаете, как что-то сделать, разбейте его на более мелкие части. Я не совсем понимаю, что вы хотите, поэтому я собираюсь предположить следующее.

У вас есть список

x = [4.5, 6.9, 7.5, 9.2, ...]

Вы хотите новый список, который занимает первую треть этого списка. Но вы не знаете, как это сделать. Так что сломай это. Так как тебе это? Давайте начнем со списка инструкций.

  1. Создать список, у
  2. Возьмите первый элемент в x и поместите его в y
  3. Возьмите второй элемент в x и поместите его в y
  4. Возьмите третий элемент в x и поместите его в y
  5. Стоп, когда у содержит первую треть элементов в x

Тогда попробуйте следовать инструкциям. Во-первых, как нам создать пустой список в Python?

y = []

Далее нам нужно повторить одно и то же несколько раз. Как мы повторяем одно и то же действие много раз в питоне?

for idx in range(number of times to repeat):

Хорошо, но сколько раз нам нужно повторять? Понятно, что вы хотите повторить одну треть длины х. Как мы это выясним? Снова, возьмите проблему и разбейте ее на шаги

  1. найди длину х
  2. разделите эту длину на 3

Как мы можем найти длину чего-то в питоне?

len(x)

Как мы разделим на три?

len(x) // 3

Хорошо, вернемся к петле

for idx in range( len(x) // 3 ):

Теперь, как взять элемент idx из x и поместить его в y? Опять же, давайте разберем его по шагам:

  1. Получить элемент idxth для x
  2. Добавить этот элемент к y

Как мы можем получить элемент idxth списка в python?

x[idx]

Как добавить что-то в список

y.append( object to add )

объединить их:

y.append( x[idx] )

И, таким образом, у нас есть окончательный код:

y = []
for idx in range( len(x) // 3 ):
    y.append( x[idx] )

В программировании вам нужно разбить проблему на части, которые вы знаете, как ее решить. Если вы не можете этого сделать, вы, вероятно, пытаетесь сделать что-то сверх вашего уровня квалификации. Мы с радостью поможем, если вы не знаете, как выполнить простое задание или предложить лучшее, что вы делаете.

К сожалению, ваш случай выглядит как кто-то, кто собирал волшебные кусочки кода, не понимая, что делает код. Я не могу читать твои мысли, я не знаю, правда ли это. Но если вам нужна помощь, вам нужно будет продемонстрировать, что вы пытались. Примеры включают в себя:

  1. Код, который вы написали, который не делал то, что вы хотели
  2. Документация, которую вы прочитали, но не поняла
  3. Обсуждение вашей попытки разбить проблему на более мелкие проблемы

Я более чем готов помочь начинающему программисту. Я был один. У меня не было такого ресурса, как Stack Overflow, и мне пришлось самому все выяснить. Моя способность писать код сегодня, вероятно, хорошая, потому что никто просто не дал мне ответов Мы рады помочь вам, когда застряли, но вы, кажется, застряли больше, чем вы двигаетесь, вот настоящая проблема здесь.

Вы продолжаете спрашивать нас о рыбе, вам нужно научиться ловить рыбу.

0 голосов
/ 26 марта 2011

Я не знаю, к чему именно вы стремитесь, но я думаю, что вы должны сделать ваши поплавки правильными

import csv
reader = csv.reader(open('test.data', 'r'))
result = {}
for row in reader:
    uclass, values = row[-1], [float(item) for item in  row[:-1]]
    if uclass in result:
        result[uclass].append(values)
    else:
        result[uclass] = [values]
print(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...