Skip to main content
 首页 » 编程设计

python之NumPy hstack 抛出 "ValueError: all the input arrays must have same number of dimensions"

2025年05月04日13leader

data = [['297348640', 'Y', '12', 'Y'], 
       ['300737722','Y', '1', 'Y'], 
       ['300074407', 'Y',  '1', 'N']] 

我想将其转换为 NumPy 数组,所以我这样做了:

data = np.array(data) 

上面的工作正常。

现在我有两个列表,比方说

a = [0,2,6] 
b = [21,21,9] 

我必须将这些附加到我之前列表的最后:

data = [['297348640', 'Y', '12', 'Y', 0, 21], 
       ['300737722','Y', '1', 'Y', 2, 21], 
       ['300074407', 'Y',  '1', 'N', 6, 9]] 

我试过了,但它给了我错误的维度错误

a = np.array([a]) 
b = np.array([b]) 
 
data = np.hstack(data,(a)) 
data = np.hstack(data,(b)) 
 
ValueError: all the input arrays must have same number of dimensions  

请您参考如下方法:

类似于@cᴏʟᴅsᴘᴇᴇᴅ的解决方案,但不是传递dtype=object,而是传递data的dtype:

data = np.array([['297348640', 'Y', '12', 'Y'], 
                 ['300737722','Y', '1', 'Y'], 
                 ['300074407', 'Y',  '1', 'N']]) 
 
a = [0,2,6] 
b = [21,21,9] 
 
a = np.array(a, dtype=data.dtype) 
b = np.array(b, dtype=data.dtype) 
 
data = np.hstack((data, a[:, None], b[:, None])) 

np.hstack 的第一个参数是一个数组序列。现在,您正在传递 np.hstack(data,(a)),它实际上被解析为两个参数。添加一组额外的括号将 data 和 a(和 b)带入一个序列(元组)。

最后关于索引:In numpy, what does selection by [:,None] do? .这是在模仿 np.reshape()。