【发布时间】:2016-08-09 03:55:45
【问题描述】:
问题:
给定一个字符串数据数组
dataSet = np.array(['kevin', 'greg', 'george', 'kevin'], dtype='U21'),
我想要一个返回索引数据集的函数
indexed_dataSet = np.array([0, 1, 2, 0], dtype='int')
还有一个查找表
lookupTable = np.array(['kevin', 'greg', 'george'], dtype='U21')
这样
(lookupTable[indexed_dataSet] == dataSet).all()
是真的。请注意,indexed_dataSet 和lookupTable 都可以置换,以使上述内容成立,这很好(即,lookupTable 的顺序不必等同于dataSet 中的首次出现顺序)。
慢速解决方案:
我目前有以下慢速解决方案
def indexDataSet(dataSet):
"""Returns the indexed dataSet and a lookup table
Input:
dataSet : A length n numpy array to be indexed
Output:
indexed_dataSet : A length n numpy array containing values in {0, len(set(dataSet))-1}
lookupTable : A lookup table such that lookupTable[indexed_Dataset] = dataSet"""
labels = set(dataSet)
lookupTable = np.empty(len(labels), dtype='U21')
indexed_dataSet = np.zeros(dataSet.size, dtype='int')
count = -1
for label in labels:
count += 1
indexed_dataSet[np.where(dataSet == label)] = count
lookupTable[count] = label
return indexed_dataSet, lookupTable
有没有更快的方法来做到这一点?我觉得我在这里没有充分发挥 numpy 的潜力。
【问题讨论】:
标签: python arrays string performance numpy