ywh19860616 发表于 2010-9-28 16:09

感谢qibbxxt 和Happy99,不规则txt数据转换

本帖最后由 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
请大家帮助,谢谢

qibbxxt 发表于 2010-9-28 17:38

这个不难做到,很多matlab的函数都可以讲txt的数据读进来的,关键问题是你的知道把数据具体放在什么位置的

ywh19860616 发表于 2010-9-28 17:48

qibbxxt 发表于 2010-9-28 17:38 static/image/common/back.gif
这个不难做到,很多matlab的函数都可以讲txt的数据读进来的,关键问题是你的知道把数据具体放在什么位置的

谢谢,matlab读取txt我会
但是其他的实现不了,您能帮我写个大致框架吗

re-us 发表于 2010-9-28 21:22

这个数据的具体格式是什么?
比如第一行的23,是 “空格23空格”还是就只有“23”。如果只有“23”怎么确定第一和第四个是‘0’。
具体的数据传一个上来看看

qibbxxt 发表于 2010-9-28 22:14

回复 ywh19860616 的帖子

1.我需要你的一部分数据
2.我需要准确的知道每个数据应该放在矩阵的那个位置
希望你把你的问题描述的清楚一些

ywh19860616 发表于 2010-9-28 22:31

re-us 发表于 2010-9-28 21:22 static/image/common/back.gif
这个数据的具体格式是什么?
比如第一行的23,是 “空格23空格”还是就只有“23”。如果只有“23”怎么确定 ...

谢谢您的回复,这就上传数据

ywh19860616 发表于 2010-9-28 22:50

qibbxxt 发表于 2010-9-28 22:14 static/image/common/back.gif
回复 ywh19860616 的帖子

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


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

Happy99 发表于 2010-9-28 23:34

本帖最后由 Happy99 于 2010-9-28 23:39 编辑

自己再优化下
还有直接给定1 & 以后请直接贴资料吧!
clc; clear; fid=fopen('aaa'); ii=0;
while ~feof(fid)
    str=fgetl(fid); ii=ii+1; aa{ii}=str2num(str);
end; fclose(fid);
A=zeros(ii);
for jj=1:ii, A(jj,aa{jj})=ones(size(aa{jj})); end

ywh19860616 发表于 2010-9-28 23:55

本帖最后由 ywh19860616 于 2010-9-28 23:56 编辑

Happy99 发表于 2010-9-28 23:34 http://www.chinavib.com/static/image/common/back.gif
自己再优化下
还有直接给定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形式数据是不规则的,不懂怎么实现?




非常感谢大家帮助




ywh19860616 发表于 2010-9-29 00:07

非常感谢各位,特别是qibbxxt 和Happy99
我使用Happy99的程序,已经达到要求,可以了
:handshake

qibbxxt 发表于 2010-9-29 09:39

回复 ywh19860616 的帖子

clear;clc;close all
m=4;n=3; % 通过其他方法或者函数去判断m和n
file = dlmread('数据.txt','',);
=find(file);
f(m,max(file(:)))=0;
f(sub2ind(,a,file(sub2ind(,a,b))))=1希望这段代码可以解决你的问题,望你认真分析,根据你的问题需要,适当修改代码

ywh19860616 发表于 2010-9-29 12:33

qibbxxt 发表于 2010-9-29 09:39 static/image/common/back.gif
回复 ywh19860616 的帖子

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

嗯,好的,一定好好弄清楚
谢谢您的帮助

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。
这该如何实现?谢谢帮忙

ChaChing 发表于 2010-10-24 20:59

help triu, tril !!

ywh19860616 发表于 2010-10-24 23:50

ChaChing 发表于 2010-10-24 20:59 static/image/common/back.gif
help triu, tril !!

老大,这个命令只是返回上三角或者下三角啊,具体怎么实现?
页: [1] 2
查看完整版本: 感谢qibbxxt 和Happy99,不规则txt数据转换