1

何らかの理由で、私が知っているものを行列に追加すると、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.]])

ここスタックオーバーフローで、「ああ、数字を追加して各行を列にするだけの問題だ!」と思いました。したがって、列 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

ここに 3 つの「for」が必要だとは思いませんが、データが実際に str になる前に NaN を与えていたため、そこに入れましたが、今では言い訳ができず、同じエラーが発生します。

それで、それは何ですか?間違って追加していますか?私はマトリックスにあまり慣れていません。(私はそれらを一度だけ使用しました)。

編集:ここのアドバイスに従いましたが、数字が繰り返され、最終的な行列は次のようになります。たとえば、 [[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、各データを [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 に答える