向NumPy联系人数组添加新数据时遭遇维度匹配ValueError问题
解决NumPy数组添加联系人的维度不匹配问题
问题原因
你的data数组形状是(5, 3):5行对应5种信息类别(姓名、姓氏、邮箱、用户名、密码),每行有3个元素对应3个联系人。而你创建的new_contact是(1, 5)的二维数组(1行5列),当用axis=1拼接时,NumPy要求除了拼接轴(这里是列轴)之外的其他维度(行维度)必须大小一致,但原数组行维度是5,new_contact行维度是1,因此触发维度不匹配错误。
修复方案
需要把新联系人的结构调整为(5, 1)的二维数组(5行1列),这样每个元素对应一个类别的新联系人信息,就能和原数组在列轴上拼接。
修改后的完整代码
import numpy as np data = np.array([ ["Leon","John","Petar"], #Names ["Smith","Jones","Taylor"], #Surnames ["leon.smith@gmail.com","john.jones@chello.at","peta.tayl@gmail.com"], # EMails ["maxefaxe11","Mohrhuhn3000","warpd_fungz"], #Usernames ["fakemake11","ichliebehuhn1","lollls123"] #Passwords ]) def register_contact(): # 收集用户输入 name = input("Enter name: ") surname = input("Enter surname: ") email = input("Enter email: ") username = input("Enter username: ") password = input("Enter password: ") # 将新联系人信息调整为(5,1)的形状,匹配原数组行维度 new_contact = np.array([name, surname, email, username, password]).reshape(-1, 1) global data # 沿列轴拼接,把新联系人信息追加到对应类别行的末尾 data = np.concatenate((data, new_contact), axis=1) print("Contact registered successfully.") register_contact() # 查看更新后的数组 print(data)
关键修改说明
- 把
new_contact的创建方式从[[name, surname, email, username, password]](形状(1,5))改为np.array([name, surname, email, username, password]).reshape(-1, 1),得到形状为(5,1)的数组,和原数组的行维度完全匹配。 - 保持
axis=1的拼接方向,最终会生成你期望的(5,4)结构数组。
验证结果
运行代码并输入新联系人信息后,data数组会变成如下结构:
[['Leon' 'John' 'Petar' 'Tom'] ['Smith' 'Jones' 'Taylor' 'Walker'] ['leon.smith@gmail.com' 'john.jones@chello.at' 'peta.tayl@gmail.com' 'tom.tow@gmail.com'] ['maxefaxe11' 'Mohrhuhn3000' 'warpd_fungz' 'tomi12341'] ['fakemake11' 'ichliebehuhn1' 'lollls123' 'password111']]
内容的提问来源于stack exchange,提问作者maxefaxe11
相关产品推荐
相关产品推荐

