组合numpy数组以形成矩阵

时间:2014-05-25 19:52:14

标签: python 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 :(得分: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.]])