如何将(n,)维度的NumPy数组重塑为(n,3)维度?
问题分析与解决
你的错误核心是reshape的形状参数逻辑错误:原数组总元素数是13716,而你指定的(vertices.size,3)总元素数是13716×3,两者不匹配,自然无法重塑。
正确处理步骤
先把字符串转换为数值数组
你当前的vertices是字符串数组,每个元素是包含三个坐标的字符串(比如"1.0 2.0 3.0"),需要先拆分并转换为数值类型:# 拆分每个vertex行的坐标,转换为float数组 vertices = np.array([list(map(float, line[7:].split())) for line in content if line.startswith('vertex')])这一步执行后,
vertices已经是(n,3)形状的数组了,不需要再reshape。如果已经是一维数值数组,用自动计算行数的reshape
假设你已经得到了一维的数值数组(总元素数是3的倍数),可以用-1让numpy自动计算正确的行数:vertices = vertices.reshape(-1, 3)这里
-1会自动计算为13716//3 = 4572,最终形状就是(4572,3),符合你的需求。
为什么原来的代码不行?
你之前的代码只是把每个行的子字符串存成数组元素,得到的是(m,)形状的字符串数组(m是vertex行的数量),每个元素是一个字符串,此时vertices.size等于m。如果m×3不等于13716,或者你没把字符串转成数值,就会出现形状不匹配的问题。
内容的提问来源于stack exchange,提问作者Margot Berranger
相关产品推荐
相关产品推荐

