np.newaxis与np.shape的一些细节

前言:由于在一次的学习过程中,学到了np.newaxis这一部分,使得对数组的问题,包括数据的维度问题产生了一些疑惑,通过上网搜查好像这方面的讲解没有找到,于是为了验证这个问题,只有通过自己动手实验来考察哪种结论是对的。


1、shape的问题---------->shape(2,)和shape(2,1)区别

这部分的内容网上搜的到,这里也总结下。

       在遇到数组问题的时候,经常会看到(2,)和(2,1)这两种情况出现, 刚开始没注意他们的区别,觉得也差不多啦,后来才发现大错特错。通过例子来进行说明。

import numpy as np
a =np.arange(1,3)
print("a",a)
print("a.shape",a.shape)

b= a.reshape(2,1)
print("b",b)
print("b.shape",b.shape)

c = a.reshape(1,2)
print("c",c)
print("c.shape",c.shape)

# 其中np.dot是矩阵乘法
r = a*c   -------------------------点乘,就是对应元素相乘
result = np.dot(a,b)
# resu = np.dot(a,c)
print(r)
print(result)

结果:
a [1 2]
a.shape (2,)
b [[1]
 [2]]
b.shape (2, 1)
c [[1 2]]
c.shape (1, 2)
[[1 4]]
[5]

Process finished with exit code 0

1.1.shape(2,)和shape(2,1)的区别

a[1,2]的shape值(2,),意思是一维数组,数组中有2个元素

b[[1],[2]]的shape值是(2,1),意思是一个

<think>我们被要求解释numpy中np.newaxis的作用和用法,特别是在多维数组操作中用于扩展维度。根据引用资料,np.newaxis的主要作用是为数组增加一个新的维度(轴)。它在使用上等价于None,是None的一个别名(引用[4])。具体来说:-当我们有一个一维数组时,可以使用np.newaxis将其转换为二维的行向量或列向量。-同样,对于多维数组,我们可以在任意位置插入新的维度。使用方式:在数组的索引操作中,在需要增加新维度的位置插入np.newaxis。示例:1.将一维数组转换为列向量(增加一个行维度,使形状从(n,)变为(n,1)):arr=np.array([0,1,2])arr_col=arr[:,np.newaxis]#或者arr[:,None]2.将一维数组转换为行向量(增加一个列维度,使形状从(n,)变为(1,n)):arr_row=arr[np.newaxis,:]#或者arr[None,:]3.对于多维数组,可以在任意位置插入新维度。例如,一个形状为(2,3)的二维数组:x=np.array([[1,2,3],[4,5,6]])#在第一个维度前插入新维度,变成(1,2,3)x_new=x[np.newaxis,:,:]#在第二个维度后插入新维度,变成(2,3,1)x_new2=x[:,:,np.newaxis]为什么需要np.newaxis?-广播(Broadcasting):当进行数组运算时,NumPy要求两个数组的形状在相应维度上兼容。有时需要手动调整数组维度以使其满足广播条件。-特定操作要求:某些操作(如某些神经网络层的输入)要求特定的维度数,这时可能需要增加维度。引用[5]中给出了一个广播的例子:X=np.random.randint(0,9,(2,3))mean_X=np.mean(X,axis=1)#形状为(2,)#直接做减法会报错,因为(2,3)和(2,)不能直接广播#但如果将mean_X增加一个维度,使其形状变为(2,1),则可以广播mean_X_expanded=mean_X[:,np.newaxis]#形状(2,1)result=X-mean_X_expanded#现在可以广播:从(2,1)广播到(2,3)另外,引用[1][2][3]中也展示了类似用法。总结:np.newaxis是一个用于增加数组维度的便捷工具。它在数组索引中使用,放在需要增加新维度的位置。下面我们用代码示例来展示np.newaxis的用法。</think>### NumPy中`np.newaxis`的作用用法详解 `np.newaxis`是NumPy中用于增加数组维度的特殊工具,它在多维数组操作中扮演着关键角色。本质上,`np.newaxis`是`None`的别名,用于在指定位置插入新的维度轴。 #### 核心作用 - **增加维度**:在现有数组的任意位置插入新的维度 - **改变形状**:将一维数组转换为行向量或列向量 - **广播兼容**:调整数组维度以实现广播运算 - **数据重塑**:为特定操作准备合适的数据结构 #### 基本用法示例 ```python import numpy as np arr = np.array([1, 2, 3]) # 形状 (3,) # 转换为列向量 (3,1) col_vector = arr[:, np.newaxis] print(col_vector) """ [[1] [2] [3]] """ # 转换为行向量 (1,3) row_vector = arr[np.newaxis, :] print(row_vector) # [[1 2 3]] ``` #### 多维数组扩展 ```python matrix = np.array([[1, 2], [3, 4]]) # 形状 (2,2) # 在第一个维度前插入新轴 (1,2,2) expanded1 = matrix[np.newaxis, :, :] print(expanded1.shape) # (1, 2, 2) # 在最后一个维度后插入新轴 (2,2,1) expanded2 = matrix[:, :, np.newaxis] print(expanded2.shape) # (2, 2, 1) ``` #### 广播运算应用 当进行数组运算时,维度必须兼容。`np.newaxis`可解决维度不匹配问题: ```python A = np.array([10, 20, 30]) # (3,) B = np.array([[1], [2], [3]]) # (3,1) # 广播运算:A自动扩展为(1,3),B为(3,1) result = A[np.newaxis, :] + B print(result) """ [[11 21 31] [12 22 32] [13 23 33]] """ ``` #### `np.expand_dims`的关系 `np.newaxis`是更简洁的维度扩展方法,功能等价于`np.expand_dims`: ```python # 两种方法等价 arr[:, np.newaxis] == np.expand_dims(arr, axis=1) ``` #### 实际应用场景 1. **机器学习输入**:将一维样本扩展为批量格式 ```python sample = np.array([0.1, 0.5, 0.8]) batch = sample[np.newaxis, :] # 形状 (1,3) ``` 2. **图像处理**:为灰度图添加通道维度 ```python gray_image = np.random.rand(256, 256) # (H,W) rgb_ready = gray_image[:, :, np.newaxis] # (H,W,1) ``` 3. **矩阵运算**:实现向量矩阵的逐元素操作 ```python matrix = np.array([[1,2],[3,4]]) vector = np.array([10,20]) result = matrix * vector[np.newaxis, :] """ [[10 40] [30 80]] """ ``` #### 注意事项 1. 插入的新维度长度为1 2. 原始数据不会被复制,仅改变视图 3.切片操作无缝结合使用 4. 过多使用可能导致代码可读性下降 通过合理使用`np.newaxis`,可以灵活处理各种维度转换需求,特别是在数据预处理和科学计算中实现高效的维度操作[^1][^3][^4]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

且行且安~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值