python解决ValueError: could not broadcast input array from shape (X) into shape (Y)

博主在使用PyTorch进行预测后,尝试将预测值以阶梯图形式绘制在坐标轴上,遇到了ValueError,原因是试图将三维数组赋值给一维数组。解决方案是通过np.squeeze()函数将三维数组转换为一维,然后逐段赋值给目标数组,成功实现了阶梯图的绘制。重点涉及Python numpy库的数组操作和matplotlib的绘图功能。
部署运行你感兴趣的模型镜像

问题描述:这是我在pytorch中写预测函数时画图所遇到得问题,因为我需要将我的预测值贴到坐标上,对应于纵坐标(每个值对应一个区间即可),可以理解为我只有三个值,但是我要画出阶梯图,然后出现了这种问题:ValueError: could not broadcast input array from shape (3) into shape (200),就是因为我要把一个值在一个数组得前200都是这同样得值,这样就完成了阶梯的一条线,但是它数组要求只能传一维的进去,而我的input array是3维,因此只需在传入之前对获得的三个值进行debug或者shape一下就可以看出它的维度。其实也可以理解为我知做了代码块第三行的操作。

解决方法

#我print我的shape,发现是(1,1,3)是三维的,那么现在只需要改为一维就可以了,即改为(3,)
depth = np.arange(1500, 2001, 1)
v = np.empty(shape=501, )
v_ture=np.squeeze(v_ture)  #将数组(1,1,3)转为(3,),这样才能进行赋值到v中,因为v是一维数组,v_ture为三维数组,存了三个值
#print(v_ture.shape)

v[:200] = v_ture[0]
v[200:350] = v_ture[1]
v[350:] = v_ture[2]
plt.plot(v, depth, 'b', linewidth=5, label='True $v_p$')

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

你遇到的错误: ``` ValueError: could not broadcast input array from shape (2) into shape (28873) ``` 通常发生在 `pandas` 或 `numpy` 的数组操作中,特别是在使用 `pd.get_dummies()` 时,如果某个列的值在某些行中为 `NaN`,而你又没有处理缺失值,就可能导致广播错误。 --- ### ✅ 错误原因分析: ```python dummies = pd.get_dummies(df[col], prefix=col) ``` 当 `df[col]` 中存在缺失值(`NaN`)时,`pd.get_dummies()` 会返回一个比原始 `df` 行数少的 `DataFrame`,当你试图将它 `concat` 回去时,就会出现广播错误。 --- ### ✅ 解决方法: 我们需要在使用 `pd.get_dummies()` 时,确保它能与原始 `DataFrame` 对齐,并处理缺失值。可以通过以下方式解决: ```python dummies = pd.get_dummies(df[col].fillna(-999), prefix=col, dummy_na=False) ``` 然后在 `concat` 时使用 `join=&#39;outer&#39;` 或 `reset_index()` 保证对齐。 --- ### ✅ 修改后的 `perform_single_choice_analysis_per_option` 函数如下: ```python def perform_single_choice_analysis_per_option(df, single_choice_cols, target_columns): all_results = {} binary_columns_all = [] # 为每个单选列生成 one-hot 编码 for col in single_choice_cols: # 填充缺失值并进行 one-hot 编码 dummies = pd.get_dummies(df[col].fillna(-999), prefix=col, dummy_na=False) # 将 one-hot 列合并回原 DataFrame df = pd.concat([df, dummies], axis=1) binary_columns_all.extend(dummies.columns) # 对每个目标变量进行分析 for target in target_columns: print(f"\n📊 正在分析目标列:{target} 与单选列的各个选项") results = {} for bin_col in binary_columns_all: contingency_table = pd.crosstab(df[target], df[bin_col]) chi2, p, dof, expected = chi2_contingency(contingency_table) results[bin_col] = {&#39;chi2&#39;: chi2, &#39;p&#39;: p} # 转换为DataFrame result_df = pd.DataFrame(results).T result_df[&#39;significant_0.05&#39;] = result_df[&#39;p&#39;] < 0.05 result_df[&#39;significant_0.01&#39;] = result_df[&#39;p&#39;] < 0.01 all_results[target] = result_df return all_results ``` --- ### ✅ 可选:避免填充缺失值的替代方案 如果你不想填充缺失值,可以使用 `reindex` 保证维度一致: ```python def perform_single_choice_analysis_per_option(df, single_choice_cols, target_columns): all_results = {} binary_columns_all = [] for col in single_choice_cols: # 使用 get_dummies 并保证与原数据对齐 dummies = pd.get_dummies(df[col], prefix=col) dummies = dummies.reindex(index=df.index, fill_value=0) # 保证行数一致 df = pd.concat([df, dummies], axis=1) binary_columns_all.extend(dummies.columns) # 后续卡方分析同上 ... ``` --- ### ✅ 总结: | 方法 | 描述 | 推荐 | |------|------|------| | `fillna(-999)` + `get_dummies` | 填充缺失值后编码 | ✅ 推荐 | | `reindex(fill_value=0)` | 保证维度一致 | ✅ 推荐 | | 直接使用 `get_dummies` | 有缺失值时会报错 | ❌ 不推荐 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值