这似乎应该是直截了当的,但我无法理解。
数据源是一个带有以下内容的两列逗号分隔输入文件:
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]])
答案 0 :(得分: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]
前一行产生一个二维矩阵,这就是导致错误信息的原因。后者产生具有相同数据的1-D阵列。
答案 1 :(得分: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.]])