在我追加数字后,矩阵返回NaN

时间:2013-07-16 14:29:55

标签: python python-2.7 matrix append nan

出于某种原因,当我在矩阵上附加我所知道的数字时,我得到的是几个带有nan的数组。例如:[[nan nan nan nan nan] [nan nan nan 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] ......]:/

1 个答案:

答案 0 :(得分: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])

编辑:这是一个明确的例子。

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.]])

`