Traceback (most recent call last):
File "D:\pythonproject\identifiyface\main.py", line 54, in <module>
x=np.concatenate((peterwang,lucydu),axis=0)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (3,) + inhomogeneous part.
这种错误如何解决
问题点:数据拼接错误
分析思路: np.concatenate 是numpy中对array进行拼接的函数. 拼接前,需要打印两个数组的shape.
axis参数为指定按照哪个维度进行拼接,设置axis=0则代表着按照第一维度进行拼接.
例如:x1为[5,4] x2为[3,4],设置axis=0 拼接后为 [8,4]
若x1和x2的第二维度尺寸不相等,无法拼接。
解决办法:先分析两个数组的维度尺寸是否相等,符不符合拼接条件.
print(peterwang)
print(peterwang.shape)
print(lucydu)
print(lucydu.shape)
不知道你这个问题是否已经解决, 如果还没有解决的话:这个错误是因为在使用np.concatenate
函数时,尝试将一个sequence
类型的列表 peterwang
或 lucydu
分配给数组 x
元素位置,而目标数组 x
已经是一个多维数组。
要解决这个错误,你可以考虑以下解决方案:
确保 peterwang
和 lucydu
是正确格式的数组。可以使用 type()
函数来检查它们的类型。如果它们是列表或元组,可能需要先将它们转换为 NumPy
数组。
检查 peterwang
和 lucydu
的维度是否一致。np.concatenate
函数要求拼接的数组具有相同的维度。
使用 np.array
函数来创建目标数组 x
,并设置其初始形状。例如,如果 peterwang
和 lucydu
都是一维数组,可以使用 np.zeros
函数创建一个初始形状为 (0, peterwang.shape[0])
的数组。
以下是可能的代码示例:
import numpy as np
# 将 peterwang 和 lucydu 转换为 NumPy 数组(如果它们不是数组)
peterwang = np.array(peterwang)
lucydu = np.array(lucydu)
# 检查维度是否一致
if peterwang.shape != lucydu.shape:
print("Error: Dimensions of peterwang and lucydu do not match.")
exit()
# 创建目标数组 x
x = np.zeros((0, peterwang.shape[0])) # 根据 peterwang 的维度设置 x 的初始形状
# 拼接 peterwang 和 lucydu 到 x
x = np.concatenate((x, peterwang), axis=0)
x = np.concatenate((x, lucydu), axis=0)
print(x)
请注意,上述代码仅仅是给出了一个可能的解决方案示例,真正的解决方案可能会根据具体情况有所不同。希望这可以帮助到你解决这个错误。如果对于你的问题还存在疑惑,请提供更多上下文和具体代码,我将尽力提供更准确的解决方案。
opencv 只能识别平面图形。
你给出的数字系列,有不是一个平面的点