1

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

在堆栈溢出中,我想'哦,只是附加数字并将每一行作为一列的问题!因此,如果我想要我的第 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] ...] :/

4

1 回答 1

1

matrix[k] = ytest.append(dat)不做你认为它做的事!而是尝试matrix[k] = dat将每个 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.]])

`

于 2013-07-16T14:32:11.287 回答