声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3464|回复: 16

[编程技巧] 感谢qibbxxt 和Happy99,不规则txt数据转换

  [复制链接]
发表于 2010-9-28 16:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
本帖最后由 ywh19860616 于 2010-9-29 00:09 编辑

求助txt形式数据转换成matlab矩阵形式
我有一个txt数据,格式如下(这里只假设了4行,其实量很大)
2 3
1 3 4
1 2
1 2 3
我现在想转换成4*4阶矩阵形式,(这里4就表示上面数字中出现的最大数,当然这个可以自己设定,可以不用查找)
转换后形式为,矩阵A:
A=
0 2 3 0
1 0 3 4
1 2 0 0
1 2 3 0

意思就是把txt中对应有数字的放到矩阵A对应位置中,而没有数字的赋值为0
请大家帮助,谢谢
回复
分享到:

使用道具 举报

发表于 2010-9-28 17:38 | 显示全部楼层
这个不难做到,很多matlab的函数都可以讲txt的数据读进来的,关键问题是你的知道把数据具体放在什么位置的
 楼主| 发表于 2010-9-28 17:48 | 显示全部楼层

谢谢,matlab读取txt我会
但是其他的实现不了,您能帮我写个大致框架吗
发表于 2010-9-28 21:22 | 显示全部楼层
这个数据的具体格式是什么?
比如第一行的23,是 “空格23空格”还是就只有“23”。如果只有“23”怎么确定第一和第四个是‘0’。
具体的数据传一个上来看看
发表于 2010-9-28 22:14 | 显示全部楼层
回复 ywh19860616 的帖子

1.我需要你的一部分数据
2.我需要准确的知道每个数据应该放在矩阵的那个位置
希望你把你的问题描述的清楚一些
 楼主| 发表于 2010-9-28 22:31 | 显示全部楼层
re-us 发表于 2010-9-28 21:22
这个数据的具体格式是什么?
比如第一行的23,是 “空格23空格”还是就只有“23”。如果只有“23”怎么确定 ...

谢谢您的回复,这就上传数据
 楼主| 发表于 2010-9-28 22:50 | 显示全部楼层
qibbxxt 发表于 2010-9-28 22:14
回复 ywh19860616 的帖子

1.我需要你的一部分数据

感谢您的热心指导
我已把问题描述清楚,及上传了数据。
谢谢,帮忙看能否实现

问题描述.doc

26.5 KB, 下载次数: 2

数据.txt

21 Bytes, 下载次数: 0

发表于 2010-9-28 23:34 | 显示全部楼层
本帖最后由 Happy99 于 2010-9-28 23:39 编辑

自己再优化下
还有直接给定1 & 以后请直接贴资料吧!
  1. clc; clear; fid=fopen('aaa'); ii=0;
  2. while ~feof(fid)
  3.     str=fgetl(fid); ii=ii+1; aa{ii}=str2num(str);
  4. end; fclose(fid);
  5. A=zeros(ii);
  6. for jj=1:ii, A(jj,aa{jj})=ones(size(aa{jj})); end
复制代码
 楼主| 发表于 2010-9-28 23:55 | 显示全部楼层
本帖最后由 ywh19860616 于 2010-9-28 23:56 编辑
Happy99 发表于 2010-9-28 23:34
自己再优化下
还有直接给定1 & 以后请直接贴资料吧!


谢谢您的回复,您的程序看得还不是很清楚
问题我已直接贴出来了,有空帮忙再看看,谢谢

问题如下:
实际问题是这样的:
假设我有4个地区,地区1与2,3相邻;地区2与1,3,4相邻,地区3与1,2相邻,地区4与1,2,3相邻。我可以得到如下形式数据(txt):红色标志代表注释
1-----------代表地区12 3------------与1相邻的地区2,3。
2----------代表地区21 3 4------与2相邻的地区1,3,4
3-----------代表地区3
1 2------与3相邻的地区1,2
4-----------代表地区4
2 -----与4相邻的2

我现在想用matlab表示出这种相邻情况,即表示成矩阵(这里只假设4个地区,所以矩阵为4*4形式)
A=
0 1 1 0
1 0 1 1
1 1 0 0
0 1 0 0
目的就是想把相邻地区赋值为1,不相邻赋值为0,对角线总为0


我的思路:我设想先把上述txt形式在matlab中转换成矩阵:
B=
0 2 3 0
1 0 3 4
1 2 0 0
0 2 0 0
再把不为0位置替换为1就可以了
但是上述txt形式数据是不规则的,不懂怎么实现?




非常感谢大家帮助


  

 楼主| 发表于 2010-9-29 00:07 | 显示全部楼层
非常感谢各位,特别是qibbxxt 和Happy99
我使用Happy99的程序,已经达到要求,可以了
:handshake
发表于 2010-9-29 09:39 | 显示全部楼层
回复 ywh19860616 的帖子
  1. clear;clc;close all
  2. m=4;n=3; % 通过其他方法或者函数去判断m和n
  3. file = dlmread('数据.txt','',[0,0,m-1,n-1]);
  4. [a,b]=find(file);
  5. f(m,max(file(:)))=0;
  6. f(sub2ind([m,max(file(:))],a,file(sub2ind([m n],a,b))))=1
复制代码
希望这段代码可以解决你的问题,望你认真分析,根据你的问题需要,适当修改代码
 楼主| 发表于 2010-9-29 12:33 | 显示全部楼层
qibbxxt 发表于 2010-9-29 09:39
回复 ywh19860616 的帖子

希望这段代码可以解决你的问题,望你认真分析,根据你的问题需要,适当修改代码

嗯,好的,一定好好弄清楚
谢谢您的帮助
 楼主| 发表于 2010-10-24 19:44 | 显示全部楼层
我有一个txt数据文件,格式如下
1 2 3 4 5
2 3 4 5 6
2 1 3 4 6
1 3 4 5 6
5 4 3 2 1
1 2 3 4 5
要读入matlab,并转化为如下形式:
0 1 2 3 4 5
2 0 3 4 5 6
2 1 0 3 4 6
1 3 4 0 5 6
5 4 3 2 0 1
1 2 3 4 5 0
就是把把矩阵扩大,对角线赋值为0。
这该如何实现?谢谢帮忙

发表于 2010-10-24 20:59 | 显示全部楼层
help triu, tril !!
 楼主| 发表于 2010-10-24 23:50 | 显示全部楼层
ChaChing 发表于 2010-10-24 20:59
help triu, tril !!

老大,这个命令只是返回上三角或者下三角啊,具体怎么实现?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-25 17:26 , Processed in 0.075996 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表