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