有1500万行数据,如何用matlab统计每行数据出现的次数并将该条数据输出到相应的文件中? 80
有1500万行数据,如何用matlab统计每行数据出现的次数并将该条数据输出到相应的文件中?1500万行数据分别装在15个文本文件中,将统计出来的数据分别输出到以下文件中...
有1500万行数据,如何用matlab统计每行数据出现的次数并将该条数据输出到相应的文件中?
1500万行数据分别装在15个文本文件中,将统计出来的数据分别输出到以下文件中:
出现1次的.txt
出现2次的.txt
出现3次的.txt
出现4次的.txt
出现5次的.txt
出现6次的.txt
...
出现15次的.txt 展开
1500万行数据分别装在15个文本文件中,将统计出来的数据分别输出到以下文件中:
出现1次的.txt
出现2次的.txt
出现3次的.txt
出现4次的.txt
出现5次的.txt
出现6次的.txt
...
出现15次的.txt 展开
1个回答
展开全部
这玩意其实不应该用MATLAB做,用任意一种高级语言比如Python做比较好。
有两种方案,都是借助hash做
如果你懂hash map的底层原理可以自己手动实现,数组嵌套,数组的每一个元素是一个链表,数组长度设为2^24,数据存放在数组哪个位置通过hash算法得到,将该数据添加到链表中,一次遍历就可以对数据完成统计,然后相同的数据必定都在同一个链表中,如果链表长度小于10(自己定)就手动判断重复,如果长度过大就再在链表里通过加salt再次统计。
嫌麻烦就借助hash map,map结构为<string,list>,如果数据未在map中出现,就添加进去,并加到list后,以后都可以直接加到list中,这样实际也是借助hash完成了分类,但list中重复率可能高了点(hash长度为16),这里统计完成了,然后是一样的操作。
有两种方案,都是借助hash做
如果你懂hash map的底层原理可以自己手动实现,数组嵌套,数组的每一个元素是一个链表,数组长度设为2^24,数据存放在数组哪个位置通过hash算法得到,将该数据添加到链表中,一次遍历就可以对数据完成统计,然后相同的数据必定都在同一个链表中,如果链表长度小于10(自己定)就手动判断重复,如果长度过大就再在链表里通过加salt再次统计。
嫌麻烦就借助hash map,map结构为<string,list>,如果数据未在map中出现,就添加进去,并加到list后,以后都可以直接加到list中,这样实际也是借助hash完成了分类,但list中重复率可能高了点(hash长度为16),这里统计完成了,然后是一样的操作。
更多追问追答
追问
语言懂C++,C#,Python也有学过点,但是都是入门水平,这种问题确实不懂怎么写代码.
追答
import random
datas = [random.randint(1,100) for i in range(1000)]
result={}
for data in datas:
if not result.get(data,None):
result[data]=[]
result[data].append(data)
else:
result[data].append(data)
for key in result.keys():
print('%s出现了%d次'%(key,len(result[key])))
# 实际上到这可能还会有重复,只是几率很小很小
# 可以对每个分类通过对数据后面加salt操作,比如加个abc,再使用上面的方法再筛一次
# 但会消耗很多内存
result_1=[]
for key in result.keys():
cdata=result[key]
tmp={}
for data in cdata:
data=str(data)+"abc" # 加salt
if not tmp.get(data, None):
tmp[data] = []
tmp[data].append(data)
else:
tmp[data].append(data)
result_1.append(tmp)
for result in result_1:
for key in result.keys():
print('%s出现了%d次' % (key, len(result[key])))
写到文本的代码就自己写吧,很简单。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |