【问题标题】:Undefined function 'minus' for input arguments of type table表类型输入参数的未定义函数“减号”
【发布时间】:2016-10-20 19:00:18
【问题描述】:

我有一个 .txt(220 行 * 12 列,第一行文本,文件的其余部分是十进制数字)文件,首先我将其转换为表格: T = readtable('xxx.txt','Delimiter','\t') 然后将 T 保存为 .mat 格式。

然后我运行了这些代码:

>> load T.mat
>> col=0;
raa=0.05;
d=0;
c=0;
n=0;
w=0;
b=0;
data4=zeros(220,10);



for col=3:12

for i=1:220
     b=0;
     c=0;

for j=1:220
     if i~=j
           d=sqrt((T(i,1)-T(j,1))^2+(T(i,2)-T(j,2))^2);
            if d<30              
            c=(1/(d^2))*T(j,col);
            b=b+c;
           else
           end

    end
  end

x=T(i,col) - (raa * b);
n=i;

data4(i,col)= x;
  data4(i,1)=n;

   end

    %   dlmwrite('trash.txt',data4,'\t')
   dlmwrite('T-100spreg2-raa05.txt',data4,'\t')    
  end

我收到一条错误消息:

错误:表类型输入参数的未定义函数“减号”。

我的问题是:

  1. 为什么当我检查 T 的大小时,我得到 ans=1 1,为什么不是 ans=220 12?

  2. 为什么我会收到此错误消息?

  3. 如果我不应该在代码中直接使用表 T,那么我需要将其转换为数组。我使用 A=table2array('T') 并得到: 错误:来自非元胞数组对象的单元格内容引用 table2array 中的错误(第 27 行)a = t{:,:}; 难道是我从第一步开始做错了什么,即将 .txt 转换为表格(因此我得到 ans=1 1 但不是 220 12)?

【问题讨论】:

  • 如果这是一个可重现的示例,则更容易找出错误。您能否包括创建一个虚拟表而不仅仅是加载语句?
  • 为什么要使用表格?我认为矩阵会简单得多。您应该能够直接将文件读入矩阵而不是表格。
  • 正如@DavidK 提到的,可能确实不需要使用表格。看看doc dlmread
  • @DavidK 只要我使用 dlmred,我就会收到一条错误消息,说读取数字时出现问题==>x y DEM asp grad DAI2 HI VI SLI2 Yield DAI1 SLI1\n。这是我的 .txt 文件的第一行。
  • 不确定为什么会出现错误。试试fscanftextscan。我会跳过第一行并从数字开始。

标签: arrays matlab text


【解决方案1】:

这只是部分答案,但它应该解释为什么您在尝试使用 table2array 时遇到错误。

相关函数的输入不应该是表名,而是表本身。 因此,您应该替换:

A=table2array('T')

通过

A=table2array(T)

也许这足以帮助您解决其他问题。

【讨论】:

  • 成功了(A=table2array(T), A =1.0e+06 *)。但是输出看起来很奇怪。例如,在txt文件中,第二行的数据为:1498704 6699085 109.079 27.26 0.06 0.14 173.498 0.627 0.459 24.366 34.116 11.325。 Then in the array A, these data became: 1.498704000000000 6.699085000000000 0.000109079000000 0.000027260000000 0.000000060000000 0.000000140000000 0.000173498000000 0.000000627000000 0.000000459000000 0.000024366000000 0.000034116000000 0.000011325000000.另一个问题,我应该在我的代码中使用数组 A 而不是表 T 吗?
  • 是的,我在 coad 中使用 A 而不是 T,它返回一个名为 A-100spreg2-raa05.txt 的文件(如 coad 中的最后一个姿势所示)。当我将 raa 值更改为例如0.01 然后我得到了 A-100spreg2-raa01.txt。非常感谢您对我的帮助,现在我将尝试不同的 raa 值并继续下一步。
  • @ZhangYaoJiayin 只是为了回复您的第一条评论,如果您的向量/数组中有大量数字,例如v = [50000000 6 0.07]matlab 将使用科学计数法。现在看起来像是[5.0000 0.0000 0.0000],但实际上它是1.0e+07 *[5.0000 0.0000 0.0000],所以实际上幅度(和精度)并没有丢失。
  • 我将 raa 值更改为 0:0.01:1(而不是 raa=0.01, raa=0.02...并多次运行 coad),然后它返回错误:下标分配维度不匹配。我该如何解决这个问题?
  • @ZhangYaoJiayin 这是一个完全不同的问题,因此我建议如下: 1. 通过运行dbstop if error 的代码找出问题所在。如果在那之后您找不到解决方案,请创建一个最小的代码片段,人们可以使用它来重现问题。然后,您可以使用它来提出新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 2013-09-30
  • 2014-10-24
  • 2015-05-28
  • 2020-07-20
  • 2018-12-26
  • 1970-01-01
相关资源
最近更新 更多