如何将(n,)和(n,1)的numpy数组相互转换?

1 投票
3 回答
4179 浏览
提问于 2025-04-18 02:15

我明白Numpy对形状为(n,1)的数组和形状为(n,)的数组的处理方式是不同的,尽管它们可以存储相同的数据。

我该如何在这两种形状之间转换呢?

3 个回答

0
In [12]: import numpy as np                                                     

In [13]: a=np.arange(1, 11)                                                     

In [14]: a                                                                      
Out[14]: array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

In [15]: a.shape                                                                
Out[15]: (10,)

In [16]: b=np.expand_dims(a, axis=1)                                            

In [17]: b                                                                      
Out[17]: 
array([[ 1],
       [ 2],
       [ 3],
       [ 4],
       [ 5],
       [ 6],
       [ 7],
       [ 8],
       [ 9],
       [10]])

In [18]: b.shape                                                                
Out[18]: (10, 1)

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

4

添加一个长度为1的轴很简单,可以用 np.newaxis 来实现:

In [188]: a = np.arange(10)

In [189]: a
Out[189]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [190]: a[:, np.newaxis]
Out[190]: 
array([[0],
       [1],
       [2],
       [3],
       [4],
       [5],
       [6],
       [7],
       [8],
       [9]])

In [191]: a[np.newaxis, :]
Out[191]: array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

其实你也可以直接用 None 来代替: a[:, None]

想要去掉所有长度为1的轴,可以使用 np.squeeze

In [193]: a = np.ones((2,1,3))

In [194]: a
Out[194]: 
array([[[ 1.,  1.,  1.]],

       [[ 1.,  1.,  1.]]])

In [195]: a.squeeze()
Out[195]: 
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])

另外一种去掉长度为1的轴的方法,就是直接切掉那个轴:

In [197]: a = np.ones((3,1))

In [198]: a
Out[198]: 
array([[ 1.],
       [ 1.],
       [ 1.]])

In [199]: a[:, 0]
Out[199]: array([ 1.,  1.,  1.])
6

希望下面的内容能帮助你理解它们之间的区别。使用 (n,) 时,你得到的是一个平坦的数组,而使用 (n,1) 时,你得到的是一个嵌套的数组(也就是包含 n 个只有一个元素的数组的数组):

>>> np.ones(10).reshape((10,))
array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])
>>> np.ones(10).reshape((10,1))
array([[ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.]])

撰写回答