Матрица, возвращающая NaN после добавления чисел

По какой-то причине, когда я добавляю к матрице то, что знаю, это числа, я получаю пару массивов с nan. например: [[нан нан нан нан нан] [нан нан нан нан нан]] и хотя это звучит смешно, это действительно расстраивает.

Что я делаю, так это беру некоторые данные из файла и пытаюсь сделать их похожими на матрицу. В файле есть столбцы и, конечно же, числа. Столбцы представляют температуру, давление и тому подобное. Моя цель состоит в том, чтобы моя матрица имела количество строк, соответствующее количеству столбцов моего файла, а количество столбцов матрицы было бы таким же, как количество данных. Почему наоборот? потому что я видел что-то вроде:

   >>> import numpy
   >>> a = numpy.zeros(shape=(5,2))
   >>> a
   array([[ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.]])
   >>> a[0] = [1,2]
   >>> a[1] = [2,3]
   >>> a
   array([[ 1.,  2.],
   [ 2.,  3.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.]])

здесь, в Stack Overflow, я подумал: «О, это просто вопрос добавления чисел и превращения каждой строки в столбец!» поэтому, если я хочу, чтобы мой столбец 1 (например, это могла быть температура), я бы просто поместил col[1] и у меня были бы все данные в этом столбце (и, вероятно, я смог бы построить его, что является моим последним достижением) . Но я считаю, что делаю это неправильно, и вот что получилось:

    matrix = np.zeros(shape=ncolumns,ndata)) #creates a zeros array numberofcolums x numberofdata
    test = [] #list for float numbers
    ytest = [] #just for appending stuff                        
    for k in range(ncolumns):                       
        for data in plot_arrayy: #plot_array is where my data is stored
            matrix[k] = data        

    print matrix

Я не верю, что мне нужно три for здесь, но я поместил его туда, потому что он давал NaN и до того, как данные были фактически str, но теперь этому нет оправдания, и все еще с той же ошибкой.

Так что же это? Я неправильно добавляю? Я не очень привык к матрицам. (Я использовал их только один раз).

РЕДАКТИРОВАНИЕ: я последовал совету здесь, но числа повторяются, и окончательная матрица получается, например: [[3, 3, 3, 3, 3] [3, 3, 3, 3, 3]...] вместо [[3, 4, 6, 5, 3] [8, 3, 9, 0, 1]...]:/


person user    schedule 16.07.2013    source источник


Ответы (1)


matrix[k] = ytest.append(dat) делает не то, что вы думаете! Вместо этого попробуйте matrix[k] = dat для присвоения каждой дате [k] или сделайте то, что, я думаю, вы пытаетесь сделать, сделайте

for i in xrange(ndata):
    matrix[k][i] = test[i]

или еще лучше matrix[k] = test

Кроме того, matrix = np.zeros(shape=ncolumns,ndata)) не является допустимым python, попробуйте matrix = np.zeros([nrows,ncols])

edit: Вот явный пример.

import numpy as np
import random

test_data = [[random.randint(0,10) for _ in xrange(4)] for _ in xrange(20)]
ncols=4
nrows=20

matrix = np.zeros(shape=(nrows,ncols))               
for k in xrange(nrows):                       
    matrix[k] = test_data[k]

Наши тестовые данные:

>>> test_data
[[5, 1, 1, 8], [3, 8, 5, 3], [2, 2, 10, 6], [8, 2, 4, 0], [7, 7, 8, 6], [9, 3, 9, 1], [2, 9, 0, 1], [3, 7, 8, 1], [3, 9, 10, 1], [6, 0, 5, 4], [2, 3, 5, 9], [8, 6, 3, 3], [9, 10, 3, 0], [6, 3, 2, 6], [1, 5, 9, 0], [7, 7, 1, 7], [2, 8, 2, 9], [2, 10, 8, 8], [1, 8, 3, 9], [7, 2, 9, 8]]

Окончательная матрица:

>>> matrix
array([[  5.,   1.,   1.,   8.],
       [  3.,   8.,   5.,   3.],
       [  2.,   2.,  10.,   6.],
       [  8.,   2.,   4.,   0.],
       [  7.,   7.,   8.,   6.],
       [  9.,   3.,   9.,   1.],
       [  2.,   9.,   0.,   1.],
       [  3.,   7.,   8.,   1.],
       [  3.,   9.,  10.,   1.],
       [  6.,   0.,   5.,   4.],
       [  2.,   3.,   5.,   9.],
       [  8.,   6.,   3.,   3.],
       [  9.,  10.,   3.,   0.],
       [  6.,   3.,   2.,   6.],
       [  1.,   5.,   9.,   0.],
       [  7.,   7.,   1.,   7.],
       [  2.,   8.,   2.,   9.],
       [  2.,  10.,   8.,   8.],
       [  1.,   8.,   3.,   9.],
       [  7.,   2.,   9.,   8.]])

и если вы хотите, чтобы строки test_data стали столбцами matrix, вы можете просто транспонировать, то есть matrix = matrix.T

дает:

>>> matrix.T
array([[  5.,   3.,   2.,   8.,   7.,   9.,   2.,   3.,   3.,   6.,   2.,
          8.,   9.,   6.,   1.,   7.,   2.,   2.,   1.,   7.],
       [  1.,   8.,   2.,   2.,   7.,   3.,   9.,   7.,   9.,   0.,   3.,
          6.,  10.,   3.,   5.,   7.,   8.,  10.,   8.,   2.],
       [  1.,   5.,  10.,   4.,   8.,   9.,   0.,   8.,  10.,   5.,   5.,
          3.,   3.,   2.,   9.,   1.,   2.,   8.,   3.,   9.],
       [  8.,   3.,   6.,   0.,   6.,   1.,   1.,   1.,   1.,   4.,   9.,
          3.,   0.,   6.,   0.,   7.,   9.,   8.,   9.,   8.]])

`

person seth    schedule 16.07.2013
comment
если вы выбрали этот подход, убедитесь, что вы выполняете тест, т. е. действительно меняется. Можете ли вы опубликовать пример матрицы? Но если вы пытаетесь присвоить весь список ytest матрице [k], matrix[k] = ytest действительно подходит. - person seth; 16.07.2013
comment
омг, я редактировал, ты редактировал... теперь я в замешательстве. Дай-ка я прочитаю еще раз, лол - person user; 16.07.2013