问题:
给定一个字符串数据数组
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的潜力。
您可以使用np.unique
以下return_inverse
参数:
>>> lookupTable, indexed_dataSet = np.unique(dataSet, return_inverse=True)
>>> lookupTable
array(['george', 'greg', 'kevin'],
dtype='<U21')
>>> indexed_dataSet
array([2, 1, 0, 2])
如果愿意,可以从以下两个数组重建原始数组:
>>> lookupTable[indexed_dataSet]
array(['kevin', 'greg', 'george', 'kevin'],
dtype='<U21')
如果使用熊猫,lookupTable, indexed_dataSet = pd.factorize(dataSet)
将实现相同的效果(对于大型阵列,可能会更有效)。
问题内容: 我正在尝试将分类变量的字符串数组转换为分类变量的整数数组。 例如 我意识到可以通过循环完成此操作,但我想有一种更简单的方法。谢谢。 问题答案: 好吧,这是一个hack …但是有帮助吗?
控制台输出 编辑:
我正试图利用谷歌电子表格(谷歌脚本)中的地图功能,使用API从Bittrex获取我的帐户硬币余额。这是我的JSON对象: 理想情况下,我希望根据结果中的键和使用每个对象数据的基础行自动填充标题行。我看到了spme解决方案如何为每种或更复杂的方式使用。但我想这可以通过映射来实现。下面是我如何映射顶行,但不知道如何映射值: 谷歌电子表格中的预期输出为
问题内容: 因此基本上,用户是从扫描仪输入中输入序列。 等等。 它可以是任意长度,并且必须是整数。 我想将输入的字符串转换为整数数组。 所以会,就等 有什么提示和想法吗?我正在考虑实现获取先前的编号并将它们解析在一起,并将其应用于数组中的当前可用插槽。但是我不太确定如何编写代码。 问题答案: 您可以从扫描仪中读取整个输入行,然后将其分开,然后得到一个,将每个数字解析为与索引一对一匹配的…(假设输入
问题内容: 这段代码有效(取自Javadoc): 这是无法编译的: IDEA告诉我,“ lambda表达式中的返回类型字符串不兼容”。 为什么呢 以及如何解决? 问题答案: 创建一个,而不是一个。因此,在将映射到对象时,您需要调用而不仅仅是。 这应该按预期工作: 您也可以这样写:
我需要在Java中将以下json字符串转换为Map:请注意,这个json字符串中包含数组,这就是我面临的问题: JSON解析器错误:不能将java.lang.String实例反序列化出START_OBJECT令牌...};行:3,列:20](通过引用链:java.util.LinkedHashMap[“level3”])com.fasterxml.jackson.databind.JSONMapp