合并numpy数组形成矩阵
这看起来应该很简单,但我就是搞不定。
数据来源是一个有两列、用逗号分隔的输入文件,内容如下:
6,10
5,9
8,13
...
而我的代码是:
import numpy as np
data = np.loadtxt("data.txt", delimiter=",")
m = len(data)
x = np.reshape(data[:,0], (m,1))
y = np.ones((m,1))
z = np.matrix([x,y])
这段代码给我报了这个错:
Users/acpigeon/.virtualenvs/ipynb/lib/python2.7/site-packages/numpy-1.9.0.dev_297f54b-py2.7-macosx-10.9-intel.egg/numpy/matrixlib/defmatrix.pyc in __new__(subtype, data, dtype, copy)
270 shape = arr.shape
271 if (ndim > 2):
--> 272 raise ValueError("matrix must be 2-dimensional")
273 elif ndim == 0:
274 shape = (1, 1)
ValueError: matrix must be 2-dimensional
无论我怎么调整格式,都无法让它正常工作,所以我可能漏掉了什么简单的东西,或者有更好的方法来解决这个问题。
补充说明:
如果能提前说明我想要的输出结果就好了。这里有一行代码可以生成我想要的结果:
In [1]: np.matrix([[5,1],[6,1],[8,1]])
Out[1]:
matrix([[5, 1],
[6, 1],
[8, 1]])
2 个回答
0
或者先把这个数组变成一个矩阵,然后再把最后一列改成1呢?
In [2]: data=np.loadtxt('stack23859379.txt',delimiter=',')
In [3]: np.matrix(data)
Out[3]:
matrix([[ 6., 10.],
[ 5., 9.],
[ 8., 13.]])
In [4]: z = np.matrix(data)
In [5]: z[:,1]=1
In [6]: z
Out[6]:
matrix([[ 6., 1.],
[ 5., 1.],
[ 8., 1.]])
2
你可以这样生成想要的输出:
In [12]: np.array((data[:, 0], np.ones(m))).transpose()
Out[12]:
array([[ 6., 1.],
[ 5., 1.],
[ 8., 1.]])
上面的内容是从 ipython
复制过来的,所以有 ipython
的样式提示。
对之前版本的回答
要消除错误,可以把:
x = np.reshape(data[:, 0], (m, 1))
替换成:
x = data[:, 0]
前面的那行代码生成的是一个二维矩阵,这就是导致错误信息的原因。而后面的那行代码生成的是一个一维数组,里面的数据是一样的。