numpy连接维度不匹配

numpy连接维度不匹配,numpy,concatenation,Numpy,Concatenation,我遇到了numpy的concatenate问题,我一直无法理解,希望有人遇到并解决了相同的问题。我正在尝试将SciKit Learn的TfidVectorier和labelencoder创建的两个数组连接在一起,但收到一条错误消息“阵列必须具有相同的维数”,尽管输入分别为(7794612157)阵列和(779461000)阵列。(如注释中所要求,底部有一个可复制的示例) 我最初认为B被编码为稀疏矩阵可能是问题的原因,但将其转换为密集矩阵并不能解决问题。我使用hstack解决了同样的问题 更奇怪的

我遇到了numpy的concatenate问题,我一直无法理解,希望有人遇到并解决了相同的问题。我正在尝试将SciKit Learn的TfidVectorier和labelencoder创建的两个数组连接在一起,但收到一条错误消息“阵列必须具有相同的维数”,尽管输入分别为(7794612157)阵列和(779461000)阵列。(如注释中所要求,底部有一个可复制的示例)

我最初认为B被编码为稀疏矩阵可能是问题的原因,但将其转换为密集矩阵并不能解决问题。我使用hstack解决了同样的问题

更奇怪的是,添加第三个labelencoder矩阵不会导致错误:

TV.fit(DS['tweet'])
tagvect.fit(DS['state'].tolist())
tagvect2.fit(DS['location'].tolist())
GBR=GradientBoostingRegressor()
print "creating Xtrain and test"
Xtrain=pd.DataFrame(np.concatenate([tagvect.transform(DS['state']),tagvect2.transform(DS['location']),TV.transform(DS['tweet'])],axis=1))
以下是错误消息:

  Traceback (most recent call last):
  File "smallerdimensions.py", line 49, in <module>
    Xtrain=pd.DataFrame(np.concatenate((A,B.todense()),axis=1))
ValueError: arrays must have same number of dimensions

Numpy是v1.6.1,pandas是v0.12.0,scikit是0.14.1。

hm.ndim?@askewchan两者都是2。我认为任何人都可以帮助你,你必须制作一个简化的、自包含的、可复制的错误版本。显然,你给
np.concatenate
的输入不应该抛出这个错误,所以还有其他的事情发生了。@askewchan我添加了一些代码,你可以复制/粘贴以获得错误同样的错误。当我使用
TV.transform(DS['tweet'].values).todense()
(我必须添加
.values
.tolist()时,您的代码似乎对我有效
转换所有
。转换
参数,或者我得到
值错误
——出于某种原因,它似乎对
系列
不满意。可能有些变化,我正在使用
sklearn
pandas
的发行后版本。
  Traceback (most recent call last):
  File "smallerdimensions.py", line 49, in <module>
    Xtrain=pd.DataFrame(np.concatenate((A,B.todense()),axis=1))
ValueError: arrays must have same number of dimensions
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.ensemble import GradientBoostingRegressor
from sklearn import preprocessing
import numpy as np


tweets=["Jazz for a Rainy Afternoon","RT: @mention: I love rainy days.", "Good Morning Chicago!"]
location=["Oklahoma", "Oklahoma","Illinois"]

DS=pd.DataFrame({"tweet":tweets,"location":location})



TV=TfidfVectorizer(min_df=1,max_features=1000)
tagvect=preprocessing.LabelBinarizer()

DS['location']=DS['location'].fillna("none")

tagvect.fit(DS['location'].tolist())
TV.fit(DS['tweet'])
print "before problem"
print DS['tweet']
print DS['location']
print tagvect.transform(DS['location'])
print tagvect.transform(DS['location']).shape
print TV.transform(DS['tweet']).shape
print TV.transform(DS['tweet'])
print TV.transform(DS['tweet']).todense()
print np.concatenate([tagvect.transform(DS['location']),TV.transform(DS['tweet'])],axis=1)