2016-06-08 2 views
0

Я довольно новичок в Python, и я пытаюсь перевести код Matlab. Я пытаюсь написать программу, которая начинается с загрузки пользователем или ввода их данных из спектра обучения IR, а затем приложение, добавляющее его в массив или матрицу. Но я не уверен, что я делаю это правоКак вы попросите пользователя ввести матрицу на Python?

# Requires numpy and math. 

# Import necessary modules. 
import numpy as np 
import math 

# Get data for the training spectra as a list. 
# Then turn that list into a numpy array given the user's input of how many 
# rows and columns there should be. 
# (An alternate way to do this would be to have users input it with commas and 
# semi-colons.) 
# btrain_matrix returns the array. 
def btrain_matrix(): 
    btrain = [input("Input btrain as a list of values separated by commas.")] 
    btrain_row_number = int(input("How many rows should there be in this matrix? \n i.e., how many training samples were there?")) 
    btrain_column_number = int(input("How many columns should there be in this matrix? \n i.e., how many peaks were trained?")) 

    btrain_array=np.array(btrain) 
    btrain_multidimensional_array = btrain_array.reshape(btrain_row_number,btrain_column_number) 

    print(btrain_multidimensional_array) 
    return (btrain_multidimensional_array) 

btrain_matrix() 
btrain_row_number = input("Please re-enter the number of rows in btrain.") 

# Insert a sequence to call btrain_matrix here 

Ошибка я получаю это (особенно потому, что я продолжаю получать ошибки!):

Input btrain as a list of values separated by commas.1,2,3 
How many rows should there be in this matrix? 
i.e., how many training samples were there?1 
How many columns should there be in this matrix? 
i.e., how many peaks were trained?3 
Traceback (most recent call last): 
    File "C:\Users\Cynthia\Documents\Lodder Lab\Spectral Analysis\Supa Fly.py", line 24, in <module> 
    btrain_matrix() 
    File "C:\Users\Cynthia\Documents\Lodder Lab\Spectral Analysis\Supa Fly.py", line 19, in btrain_matrix 
    btrain_multidimensional_array = btrain_array.reshape(btrain_row_number,btrain_column_number) 
ValueError: total size of new array must be unchanged 

Если я вход «1 , 2,3 "и" 1 "," 1 ", программа работает нормально. Как я могу распознать каждый из этих входов как отдельные элементы в списке?

+1

только пользователь на основе замечание - не спрашивайте никого к поместите матрицу в stdin вручную. Это не очень полезный подход. Просто попросите путь к файлу, содержащему матрицу, в каком-то общем формате, например .csv – lejlot

+1

«* Я постоянно получаю ошибки *», никогда не является достаточной информацией для нас, чтобы помочь вам. –

+0

@lejlot Это, наверное, действительно глупый вопрос, но как вы это делаете? –

ответ

1

Ваш код в порядке, но btrain = [input("Input btrain as a list of values separated by commas.")] в конечном итоге будет списком одной строки или списка кортежей ваших значений, если вы находитесь на python 2.7. Правильный способ сделать это было бы

btrain = input("Input btrain as a list of values separated by commas.").split(",") 

раскол (разделитель) дает список всех значений расщепленных в какой-то ограничителем в данном случае «»

+0

Спасибо, что исправил это. Я получаю новую ошибку, когда я командую ее print (btrain_multidimensional_array) Traceback (последний последний звонок): Файл «C: \ Users \ Cynthia \ Documents \ Lodder Lab \ Spectral Analysis \ Supa Fly.py" , строка 24, в печати (btrain_multidimensional_array) NameError: имя «btrain_multidimensional_array» не определен Любая идея, почему объект я приказал ему вернуться не существует? –

+0

Ну, эта ошибка возникает из-за того, что np.reshape() ничего не возвращает. Он просто изменяет существующий массив, поэтому вам не нужно назначать новую переменную. Ваша другая ошибка также должна исчезнуть. – RainbowRevenge