numpy切片不丢失维度为1时的维度(numpy slice without losing dimension)

当使用numpy切片时,维度为1的轴会被自动压缩。为避免在矩阵运算中引发错误,本文介绍了四种方法来保持这种单维度:1) 使用[:, ii][ :, np.newaxis]或[ii, :][np.newaxis, :];2) 利用[:, ii, np.newaxis]或[np.newaxis, ii, :];3) 通过[:, [ii]]或[[ii], :]切片;4) 使用reshape方法。对于某些程序,设置keepdim=True参数也能保留单维度。" 86595056,8347328,Linux环境下Samba的详细安装与配置教程,"['Linux', '网络共享', 'Samba配置', '系统管理', '网络安全']
摘要由CSDN通过智能技术生成


在输出numpy矩阵的一维切片的时候,经常会遇到一种情况是把维度为1的那个维度直接丢了,就像执行了np.squeeze语句一样。例如:

import numpy as np
a = np.array([[1,2,3],
              [4,5,6],
              [7,8,9]])
print('a.shape = ',a.shape)

b = a[:,0]
print('b.shape = ',b.shape)

c = np.array([[1],[4],[7]])
print('c.shape = ',c.shape)
print('np.squeeze(c).shape = ',np.squeeze(c).shape)

# output:
# a.shape =  (3, 3)
# b.shape 
  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 可以使用 numpy 的 `squeeze()` 函数去掉维度为 1 的维度。使用方法如下: ``` import numpy as np a = np.array([[[1], [2], [3]], [[4], [5], [6]]]) b = np.squeeze(a) print(b) ``` 输出结果: ``` [[1 2 3] [4 5 6]] ``` 可以看到原始数组 `a` 的第一维和第三维都是维度为 1 的维度,在使用 `squeeze()` 函数后被去掉了。 需要注意的是,如果使用 `np.squeeze(a,axis=...)` 参数可以指定去除特定维度。 ### 回答2: 在numpy中,可以使用numpy.squeeze()函数来去掉维度为1的维度。该函数可以去掉数组中所有维度为1的维度,并返回一个新的数组。 使用示例: ```python import numpy as np # 创建一个维度为1的数组 a = np.array([[[1, 2, 3]]]) print("原数组:", a.shape) # 输出:(1, 1, 3) # 去掉维度为1的维度 b = np.squeeze(a) print("去掉维度为1的维度后的数组:", b.shape) # 输出:(3,) ``` 在以上示例中,首先创建了一个维度为1的数组a,然后使用np.squeeze()函数去掉了维度为1的维度,得到一个新的数组b。可以看到,经过去掉维度为1的维度后,数组b的形状变为了(3,),即不再包含任何维度为1的维度。 需要注意的是,如果数组中的某个维度不为1,则该维度不会被去掉。例如,如果在以上示例中,数组a的形状为(1, 2, 3),则经过去掉维度为1的维度后,得到的新数组的形状仍然为(1, 2, 3)。 ### 回答3: 在numpy中,我们可以使用numpy.squeeze()函数来去掉维度是1的维度numpy.squeeze()函数用于从数组的形状中删除单维度条目,即将有维度大小为1的维度删除。这样,原本形状为(1, n)或者(m, 1)的数组,将被转换为形状为(n, )或者(m, )的一维数组。 具体使用方法如下所示: import numpy as np # 创建一个形状为(1, 5)的二维数组 arr = np.array([[1, 2, 3, 4, 5]]) print(arr.shape) # 输出原始数组的形状 (1, 5) arr_squeeze = np.squeeze(arr) print(arr_squeeze.shape) # 输出去掉维度为1的维度后的数组形状 (5, ) 在上述示例中,我们首先创建了一个(1, 5)形状的二维数组arr。然后,通过调用np.squeeze()函数,将其转换为形状为(5, )的一维数组arr_squeeze。最后,我们分别打印原始数组和转换后数组的形状,可以看到维度为1的维度已经被去掉。 需要注意的是,若数组中不包含维度为1的维度,调用np.squeeze()函数并不会对数组进行修改,返回的结果将是原数组的副本。因此,在使用np.squeeze()函数,最好先使用np.ndim()函数查看数组的维度数,以确保它是否包含维度为1的维度
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值