我有一个大文本文件,每行标有0或1,如下所示:
1
0
0
1
...
我加载它,将其转换为numpy数组,然后我想将数组转换为dtype=int64
(因为我认为这些是字符串)。我是这样做的:
def load_data(infile):
text_file = open(infile,'r')
text = text_file.readlines()
text = map(str.strip,text)
return text
labels = load_data('labels.txt')
labels_encoded = np.array(labels)
labels_encoded = labels_encoded.astype(int)
它在Python 2.7中运行良好,我可以稍后使用我的代码在数组上工作,但是现在我遇到了Python 3.6,当我运行代码时,我收到错误:
Traceback (most recent call last):
File "dText.py", line 77, in <module>
labels_encoded = labels_encoded.astype(int)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'map'
任何人都可以帮我弄清楚这里发生了什么,以及如何让它在Python 3.6上运行?我也尝试过:
labels_encoded = np.int_(labels_encoded)
但我得到了同样的错误。我正在使用numpy版本1.13.3。感谢。
答案 0 :(得分:2)
您正在将地图对象传递到数组并尝试转换它。一旦创建了数组,就看看它。它看起来像这样:
array(<map object at 0x127680cf8>, dtype=object)
请尝试使用list(map(...))
。
def load_data(infile):
text_file = open(infile,'r')
text = text_file.readlines()
text = list(map(str.strip,text))
return text
labels = load_data('labels.txt')
labels_encoded = np.array(labels)
labels_encoded = labels_encoded.astype(int)
labels_encoded
array([1, 0, 1, 0])
如果您只是从2.7跳转,则应注意map
不再返回列表,而是可迭代。
答案 1 :(得分:0)
我有同样的问题。我的代码无效:
train_size = np.ceil(len(dataset) * 0.8).astype(int)
print(type(train_size)) # --> numpy.int32
但这很好用:
train_size = int(np.ceil(len(dataset) * 0.8))
print(type(train_size)) # --> int