合并numpy数组形成矩阵

0 投票
2 回答
1879 浏览
提问于 2025-04-18 07:33

这看起来应该很简单,但我就是搞不定。

数据来源是一个有两列、用逗号分隔的输入文件,内容如下:

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]

前面的那行代码生成的是一个二维矩阵,这就是导致错误信息的原因。而后面的那行代码生成的是一个一维数组,里面的数据是一样的。

撰写回答