扩充矩阵维度:newaxis和expand_dims的用法

本文介绍NumPy中np.newaxis和expand_dims的功能与用法,通过实例展示如何在一维数组中增加维度,实现数组形状的改变。此外,还展示了如何在深度学习应用场景中利用这些功能进行数据预处理。

一、newaxis使用详解

     np.newaxis的作用是在数组中增加一个维度,可以把一维数组二维化,并且可以选择在哪添加一个维度,下面用一个例子来理解

import numpy as np
a = np.array([1, 2, 3, 4, 5])
print(a.shape)
#结果为(5,)
a1 = a[:, np.newaxis]
#在维度后面添加一个维度
print(a1.shape)
# 结果为(5,1),此时a1数组变为
#                             [[1]
#                              [2]
#                              [3]
#                              [4]
#                              [5]]
#即从一个一行的一维数组,变成一个五行一列的二维数组

同理,你也可以在维度前面添加一个维度

import numpy as np
a = np.array([1, 2, 3, 4, 5])
print(a.shape)
#结果为(5,)
a1 = a[np.newaxis, :]
#在维度前面添加一个维度
print(a1.shape)
# 结果为(1,5),此时a1数组变为 [[1]
#                              [2]
#                              [3]
#                              [4]
#                              [5]]

#即从一个一行的一维数组,变成一个一行五列的二维数组

二、expand_dims使用详解

import numpy as np
a = np.array([1, 2, 3, 4, 5])
print(a.shape)
#结果为(5,)
a = np.expand_dims(x, axis=1)
print(x2.shape)
# 结果为(5,1),此时a1数组变为[[1 2 3 4 5]]

#即从一个一行的一维数组,变成一个一行五列的二维数组

对上面的a矩阵而言,axis=0对应的shape为5,axis=1对应的shape为0,这里参数为axis=1即把对应的shape修改为1,同样的,也可以扩充2,3维矩阵

import numpy as np
a1 = np.array([1, 2, 3],[ 4, 5, 6])
print(a.shape)
#结果为(2,3)
a = np.expand_dims(x, axis=2)
print(x2.shape)
# 结果为(2,1,3),此时a1数组变为[[[1 2 3]]
#                              [[4 5 6]]]

对于上面a1矩阵而言,axis=0的shape为2,axis=1的shape为3,若在axis=1的位置添加变量,则需把axis=1的shape修改为1,同时原来的shape=3后移,矩阵的shape变为(2,1,3)。

三、实例应用

在深度学习地震层位运用中,常常需要新建两个数组来存放线号和道号,再把线号道号和预测结果进行拼接

inlines=[] #创建存放线号的空列表
xlines=[] #创建存放道号的空列表
for i in range(1,2): #只预测了第一面,所以线号只有1
    for j in range(110): #道号为110道
        trace_num=j #道号
        linee_nm=i #线号
        inlines.append(linee_nm) #将线号追加进创建的空列表中
        xlines.append(trace_num) #将道号追加进创建的空列表中
inlines=np.array(inlines) #将线列表转换为数组
xlines=np.array(xlines) #将道列表转换为数组
inlines=inlines[np.newaxis, :] #在第一维前加一个维度
    # print(inlines.shape)
xlines=xlines[np.newaxis, :] #在第一维前加一个维度
    # print(xlines.shape)
predict=np.concatenate((inlines,xlines),axis=0) #将线数组和道数组进行拼接
    # print(predict.shape)
predict=np.transpose(predict) #将拼接后数组进行转置
    # print(predict)
predict=np.concatenate((predict,predictive_y_for_training),axis=1) #将转置后数组与预测结果拼接
    # print(predict)

<think>好的,我现在要解决用户在使用Pythonnumpy库中expand_dims函数时遇到的报错问题,错误信息是“unexpected keyword argument 'asix'”。首先,我需要理解这个错误的原因。 用户提到错误是“unexpected keyword argument 'asix'”,看起来像是调用函数时传递了一个不被接受的关键字参数。首先,我应该检查expand_dims函数的正确参数名称。根据numpy的官方文档,expand_dims的函数签名是numpy.expand_dims(a, axis),其中参数名是axis,而不是asix。显然,用户在这里拼写错误,将axis写成了asix,导致Python解释器无法识别这个参数,从而抛出错误。 接下来,我需要确认这个拼写错误是否是常见问题。可能用户在使用时由于打字错误或者记忆偏差导致参数名错误。这时候,解决方法就是纠正参数名的拼写,将asix改为axis即可。 为了进一步验证,我可以参考用户提供的引用资料。比如引用[4]中给出的示例代码使用了axis参数: ```python b = np.expand_dims(a, axis=1) ``` 这再次确认了正确的参数名是axis。此外,引用[2][3]中的示例也使用了axis参数,说明用户确实需要检查自己的代码是否存在拼写错误。 另外,用户可能对axis参数的具体用法不太清楚,比如axis的取值范围。例如,对于一个形状为(4,2)的数组,axis的有效值是0、1或-1、-2等。如果用户误用了超出范围的axis值,也可能导致错误,但此时报错信息会是关于axis值无效,而非参数名错误。因此当前的问题主要还是参数名拼写错误。 最后,我应该总结解决步骤:检查代码中的参数名,将asix改为axis,并确保axis的值在有效范围内。同时提醒用户在编程时注意参数的正确拼写,避免类似错误。</think>### 解决 `expand_dims` 函数参数 `asix` 报错的方法 #### 错误原因分析 错误信息 `unexpected keyword argument 'asix'` 表示函数调用时传递了无效的关键字参数 `asix`。**根本原因是参数名拼写错误**。`numpy.expand_dims()` 的正确参数名为 `axis`,而非 `asix`[^2][^3][^4]。 #### 解决步骤 1. **修正参数名**:将 `asix` 改为 `axis`。 ```python import numpy as np x = np.array([1, 2, 3]) # 错误写法:np.expand_dims(x, asix=0) # 正确写法: x_expanded = np.expand_dims(x, axis=0) # 在第0轴扩展维度 ``` 2. **验证 `axis` 的取值范围**: - 若输入数组的维度为 $n$,则 `axis` 的有效范围为 $-n-1 \leq \text{axis} \leq n$。 - 例如,一维数组(形状 $(3,)$)的 `axis` 可为 `0` 或 `-1`,若设为 `1` 会报错 `AxisError: axis 1 is out of bounds`[^4][^5]。 #### 示例对比 ```python # 错误示例(拼写错误) try: np.expand_dims(x, asix=0) except TypeError as e: print(f"错误信息:{e}") # 输出:unexpected keyword argument 'asix' # 正确示例 x_expanded = np.expand_dims(x, axis=0) print("扩展后形状:", x_expanded.shape) # 输出:(1, 3) ``` #### 其他注意事项 - 若需多维度扩展,需多次调用 `expand_dims`,例如: $$ \text{形状 } (3,) \xrightarrow{\text{axis=0}} (1, 3) \xrightarrow{\text{axis=1}} (1, 1, 3) $$ - 等价操作:`x[np.newaxis, :]` 或 `x[:, np.newaxis]`。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值