简体   繁体   中英

Combine numpy arrays to form a matrix

This seems like it should be straightforward, but I can't figure it out.

Data source is a two column, comma delimited input file with these contents:

6,10
5,9
8,13
...

And my code is:

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])

Which gives me this error:

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

No amount of reshaping seems to get this to work, so I'm either missing something really simple or there's a better way to do this.

EDIT: Would have been helpful to specify the output I am looking for. Here is a line of code that generates the desired result:

In [1]: np.matrix([[5,1],[6,1],[8,1]])
Out[1]: 
matrix([[5, 1],
        [6, 1],
        [8, 1]])

The desired output can be generated this way:

In [12]: np.array((data[:, 0],  np.ones(m))).transpose()
Out[12]: 
array([[ 6.,  1.],
       [ 5.,  1.],
       [ 8.,  1.]])

The above is copied from ipython and so has ipython style prompts.

Answer to previous version

To eliminate the error, replace:

x = np.reshape(data[:, 0], (m, 1))

with:

x = data[:, 0]

The former line produces a 2-dimensional matrix and that is what causes the error message. The latter produces a 1-D array with the same data.

Or how about first turning the array into a matrix, and then change the last column to 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.]])

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM