在Numpy中处理N x 1矩阵

4 投票
2 回答
2699 浏览
提问于 2025-04-17 22:09

给定一个大小为 (n,) 的numpy数组,怎么把它变成一个大小为 (n,1) 的numpy数组呢?

这样做的原因是我想把两个大小分别为 (n,)(n,) 的numpy数组进行矩阵相乘,得到一个大小为 (n,n) 的数组。但是当我这样做的时候:

numpy.dot(a,b.T)

它提示我不能这样做。我知道把一个 (n,) 的数组转置是没用的,所以我觉得把 (n,) 的数组改成 (n,1) 会更好,这样就可以避免这个问题了。

2 个回答

4

你可以用 None 来表示那些你希望被视为无效的维度。

a = np.asarray([1,2,3])
a[:]
a[:, None]

In [48]: a
Out[48]: array([1, 2, 3])

In [49]: a[:]
Out[49]: array([1, 2, 3])

In [50]: a[:, None]
Out[50]: 
array([[1],
       [2],
       [3]])
4

使用 reshape (-1,1) 可以把形状为 (n,) 的数据转换成形状为 (n,1) 的数据,下面有一些详细的例子:

In [1]:

import numpy as np
A=np.random.random(10)
In [2]:

A.shape
Out[2]:
(10,)
In [3]:

A1=A.reshape(-1,1)
In [4]:

A1.shape
Out[4]:
(10, 1)
In [5]:

A.T
Out[5]:
array([ 0.6014423 ,  0.51400033,  0.95006413,  0.54321892,  0.2150995 ,
        0.09486603,  0.54560678,  0.58036358,  0.99914564,  0.09245124])
In [6]:

A1.T
Out[6]:
array([[ 0.6014423 ,  0.51400033,  0.95006413,  0.54321892,  0.2150995 ,
         0.09486603,  0.54560678,  0.58036358,  0.99914564,  0.09245124]])

撰写回答