【问题标题】:Matrix returning NaN after I append numbers附加数字后矩阵返回 NaN
【发布时间】:2013-07-14 19:11:33
【问题描述】:

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

【问题讨论】:

    标签: python python-2.7 matrix append nan


    【解决方案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.]])
    

    `

    【讨论】:

    • 如果您采用这种方法,请确保您正在循环测试,即 dat 实际上正在改变。你能发布一个示例矩阵吗?但是,如果您尝试将整个列表 ytest 分配给 matrix[k],matrix[k] = ytest 确实是要走的路。
    • 天啊,我编辑了,你编辑了..现在我很困惑。让我再读一遍哈哈
    猜你喜欢
    • 2017-09-19
    • 2019-04-06
    • 2019-12-07
    • 1970-01-01
    • 2017-04-20
    • 2014-07-01
    • 2021-05-11
    • 2012-10-20
    • 2012-02-25
    相关资源
    最近更新 更多