ValueError: cannot reshape array of size 2370032 into shape (28,28)

项目场景:

提示:这里简述项目相关背景:

k-means聚类MNIST数据集,将聚类数据转为图像报错

问题描述

提示:这里描述项目中遇到的问题:
ValueError: cannot reshape array of size 2370032 into shape (28,28)

fix, axes = plt.subplots(4, 5, figsize=(5, 4),subplot_kw={'xticks': (), 'yticks': ()})
for cluster,ax in zip(clusters,axes.ravel()):
     cluster = np.array(cluster)
     image = cluster.reshape([28,28])
     ax.imshow(image, cmap="gray")
   

原因分析:

提示:这里填写问题的分析:
1.网上查找原因是前后大小不匹配,没法转换。没看明白怎么改的,重新看代码,尝试搞清楚2370032这个大小是怎么转换过来的。

解决方案:

查看了cluster的具体内容,发现是[[[a]]],示例代码的数据是l类似[a,b],所以在变量类型相同的情况下,会报错。想办法取到a,再转换a就可以。

### 错误分析 当尝试将大小为7667520的一维数组重塑成形状(30, 30)时,会遇到`ValueError: cannot reshape array of size 7667520 into shape (30,30)`错误。这是因为目标形状的元素总数(即30 * 30 = 900)不等于原有一维数组中的元素数量。 ### 解决方案概述 要成功执行reshape操作,源数据的总元素数必须能够被新形状所容纳。如果无法改变输入数据,则应调整期望的目标形状以匹配现有数据量。 ### 实际解决方案 #### 方法一:验证并计算合适的尺寸 为了确保可以正确地重新塑造给定的数据集,在进行任何转换之前先确认原始数据的数量,并基于此来决定新的维度: ```python import numpy as np data_size = 7667520 target_shape_area = data_size ** 0.5 # 计算平方根作为边长估计值 new_side_length = int(np.ceil(target_shape_area)) # 向上取整得到最接近的正方形边长 print(f"建议的新边长:{new_side_length}") if new_side_length**2 >= data_size: reshaped_array = np.arange(data_size).reshape(new_side_length, -1)[:,:new_side_length] else: raise Exception("找不到合适的新尺寸") reshaped_array.shape ``` 这种方法试图找到一个尽可能接近正方形的新尺寸,同时保证不会丢失任何数据。 #### 方法二:填充或裁剪数据至指定尺寸 另一种方法是在必要时通过添加额外的零或其他占位符或将多余的部分截断来强制适应特定的输出尺寸: ```python def pad_or_trim_to_fit(array, target_shape): current_shape = array.size if isinstance(target_shape, tuple): required_elements = np.prod(target_shape) elif isinstance(target_shape, int): required_elements = target_shape difference = abs(required_elements - current_shape) if current_shape < required_elements: padded_data = np.pad(array.flatten(), (0,difference), mode='constant', constant_values=0) else: padded_data = array[:required_elements] return padded_data.reshape(target_shape) original_data = np.random.rand(7667520) desired_shape = (30, 30) try: result = pad_or_trim_to_fit(original_data, desired_shape) except ValueError as e: print(e) result.shape ``` 这段代码展示了如何根据需求动态处理不同长度的数据,使其适合预定义的空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值