w*******u 发帖数: 764 | 1 查了好久的help都没有找到该怎么办,所以来这里请求专家们的指点。
我现在有好几个“类三角矩阵”--为什么是“类”三角矩阵:所有应该是0的项都是空
白。
i.e.第一行有一个元素(A11)
第二行有两个元素(A21,A22)
第三行有三个元素(A31,A32,A33)
...
第n行有n个元素(An1,An2,...Ann)
现在我需要把这“半个”三角矩阵补全,
option 1: 把缺失的0都补全
option 2: 把这半个矩阵的镜像投到另半边,令A1n=An1,A2n=An2....
不知道该怎么办?
现在的这半个矩阵无法输入matlab.
这些数据组是保存在.txt文件里面,copy&paste到excel也不行,列和列无法分开。
现在我唯一的方法是手动输入所有的“0”,再输入到matlab,
再转置,把转置矩阵和原矩阵相加,合成最后需要的对称矩阵。
实在是笨死了。
不知道有没有聪明一点的方法?请各位专家们不吝赐教,感激不尽! |
Z****e 发帖数: 2999 | 2 what's your current format?
give some example bah
【在 w*******u 的大作中提到】 : 查了好久的help都没有找到该怎么办,所以来这里请求专家们的指点。 : 我现在有好几个“类三角矩阵”--为什么是“类”三角矩阵:所有应该是0的项都是空 : 白。 : i.e.第一行有一个元素(A11) : 第二行有两个元素(A21,A22) : 第三行有三个元素(A31,A32,A33) : ... : 第n行有n个元素(An1,An2,...Ann) : 现在我需要把这“半个”三角矩阵补全, : option 1: 把缺失的0都补全
|
w*******u 发帖数: 764 | 3 https://files.getdropbox.com/u/456906/Distance%20Matrix.txt
就是这样的一组数
在这里其实只有124行和124列
第一行为空(需要补成全都是0,或者A11=0,其余补成第一列现有数据的转置镜像) |
Z****e 发帖数: 2999 | 4 很久没用matlab了,想了想大概思路:
matlab自动载入数据都要求矩形数据,所以你这个文件不能直接载入
可以用fopen打开,while里面fgetl按行读,最后fclose关闭,具体可以看fgetl的帮助
对于每一行,可以用sscanf转换成数组,因为默认结果是列向量,所以要转置一下,去
掉第一个可以用slicing: A=A(:,2:N),其中N要靠size函数得到;然后直接用A(125)=0
可以得到自动补0的1x125行向量
然后用M(i,:)=A可以把行向量填进矩阵中
最后会得到一个方的下三角矩阵,再A=A+tril(A,-1)'就行了
【在 w*******u 的大作中提到】 : https://files.getdropbox.com/u/456906/Distance%20Matrix.txt : 就是这样的一组数 : 在这里其实只有124行和124列 : 第一行为空(需要补成全都是0,或者A11=0,其余补成第一列现有数据的转置镜像)
|
t****t 发帖数: 6806 | 5 挺美好的文件被你们搞复杂了
直接
a=textread('Distance Matrix.txt');
搞定
=0
【在 Z****e 的大作中提到】 : 很久没用matlab了,想了想大概思路: : matlab自动载入数据都要求矩形数据,所以你这个文件不能直接载入 : 可以用fopen打开,while里面fgetl按行读,最后fclose关闭,具体可以看fgetl的帮助 : 对于每一行,可以用sscanf转换成数组,因为默认结果是列向量,所以要转置一下,去 : 掉第一个可以用slicing: A=A(:,2:N),其中N要靠size函数得到;然后直接用A(125)=0 : 可以得到自动补0的1x125行向量 : 然后用M(i,:)=A可以把行向量填进矩阵中 : 最后会得到一个方的下三角矩阵,再A=A+tril(A,-1)'就行了
|
Z****e 发帖数: 2999 | 6 没见过这函数,哈哈哈
【在 t****t 的大作中提到】 : 挺美好的文件被你们搞复杂了 : 直接 : a=textread('Distance Matrix.txt'); : 搞定 : : =0
|
N**D 发帖数: 10322 | 7 perl
【在 w*******u 的大作中提到】 : 查了好久的help都没有找到该怎么办,所以来这里请求专家们的指点。 : 我现在有好几个“类三角矩阵”--为什么是“类”三角矩阵:所有应该是0的项都是空 : 白。 : i.e.第一行有一个元素(A11) : 第二行有两个元素(A21,A22) : 第三行有三个元素(A31,A32,A33) : ... : 第n行有n个元素(An1,An2,...Ann) : 现在我需要把这“半个”三角矩阵补全, : option 1: 把缺失的0都补全
|
d****e 发帖数: 251 | 8 dlmread will do the job of "option 1"
dist_matrix = dlmread('filename') % by default the delimiter is whitespace
% ignore first column
dist_matrix = dlmread('filename',' ',0,1)
【在 w*******u 的大作中提到】 : 查了好久的help都没有找到该怎么办,所以来这里请求专家们的指点。 : 我现在有好几个“类三角矩阵”--为什么是“类”三角矩阵:所有应该是0的项都是空 : 白。 : i.e.第一行有一个元素(A11) : 第二行有两个元素(A21,A22) : 第三行有三个元素(A31,A32,A33) : ... : 第n行有n个元素(An1,An2,...Ann) : 现在我需要把这“半个”三角矩阵补全, : option 1: 把缺失的0都补全
|
t****t 发帖数: 6806 | 9 那个处理大文件会很慢的
textread的后端是编译过的, 快得多
【在 d****e 的大作中提到】 : dlmread will do the job of "option 1" : dist_matrix = dlmread('filename') % by default the delimiter is whitespace : % ignore first column : dist_matrix = dlmread('filename',' ',0,1)
|
d****e 发帖数: 251 | 10 textread doesn't fill empty fields with zeros in octave.
I am not sure about Matlab.
【在 t****t 的大作中提到】 : 那个处理大文件会很慢的 : textread的后端是编译过的, 快得多
|
|
|
w*******u 发帖数: 764 | 11 好牛!赞!谢谢~
【在 t****t 的大作中提到】 : 挺美好的文件被你们搞复杂了 : 直接 : a=textread('Distance Matrix.txt'); : 搞定 : : =0
|
w*******u 发帖数: 764 | 12 啥意思啊?软件的名字吗?:)
【在 N**D 的大作中提到】 : perl
|
w*******u 发帖数: 764 | 13 非常谢谢!:)
【在 d****e 的大作中提到】 : dlmread will do the job of "option 1" : dist_matrix = dlmread('filename') % by default the delimiter is whitespace : % ignore first column : dist_matrix = dlmread('filename',' ',0,1)
|
w*******u 发帖数: 764 | 14 是的,这个命令好快,呵呵
【在 t****t 的大作中提到】 : 那个处理大文件会很慢的 : textread的后端是编译过的, 快得多
|
w*******u 发帖数: 764 | 15 it does in matlab :)
【在 d****e 的大作中提到】 : textread doesn't fill empty fields with zeros in octave. : I am not sure about Matlab.
|