フィルターのクリア

converting a table of numeric data into a double array?

515 ビュー (過去 30 日間)
Abdelrahman Taha
Abdelrahman Taha 2020 年 4 月 8 日
編集済み: Stephen23 2023 年 10 月 19 日
Hi,
I am trying to convert a table of numeric data to a double array using some of the methods presented before in some answers to similar questions like:
1- table2array function
2- X{:,:}
But they both don't work for me. They change the table into a cell, not a double array

採用された回答

BN
BN 2020 年 4 月 8 日
I believe it's mean that you have non-numeric data in your table.
Try this:
If T is your table, use cell2mat after table2array.
T_cell = table2array(T);
T_array = cell2mat(T_cell); % T_array is output
% if it is single so after this two lines use:
% T_array = double(T_array)
  3 件のコメント
BN
BN 2020 年 4 月 8 日
I believe it happens because your first data table includes text and numeric data.
Do you have a problem with using this?
data_numNEW = table2array(data_num );
data_numNEW = cell2mat(data_numNEW ); % T_array is output
I do not see your data but if the problem is you have char instead of number this maybe helps you:
data_numNEW = table2array(data_num );
data_numNEW = cellfun(@double,data_numNEW,'uni',0)
Abdelrahman Taha
Abdelrahman Taha 2020 年 4 月 8 日
編集済み: Abdelrahman Taha 2020 年 4 月 8 日
Thanks so much. That was really helpful.
I've tried both solutions, the first doesn't work, it gives me this error:
Error using cat
Dimensions of arrays being concatenated are not consistent.
However the second worked, but I needed to convert the contents of the cell array from char to string first and then into double. And then used cell2mat to convert the cell array into a matrix
data_numNEW = table2array(data_num );
data_numNEW = cellfun(@string,data_numNEW,'uni',0);
data_numNEW = cellfun(@double,data_numNEW,'uni',0);
data_numNEW = cell2mat(data_numNEW);

サインインしてコメントする。

その他の回答 (1 件)

Chhanda
Chhanda 2023 年 10 月 19 日
編集済み: Walter Roberson 2023 年 10 月 19 日
My code is this :
data=readtable('MainData.xlsx');
X1= data(:, 3);% Assuming time, temperature, humidity are columns 3, 4, and 5
X2=data(:, 4);
X3=data(:, 5);
% Convert variables to tables
X1Table = table(X1);
X2Table = table(X2);
X3Table = table(X3);
% Extract the dependent variable (soil moisture)
Y = data(:, 6); % Assuming soil moisture is in column 6
n=height(X1);
onesTable = table(ones(n,1));
a = [onesTable, X1Table, X2Table, X3Table];
c=pinv(a)*Y;
I am getting this error:
Error using svd
First input must be single or double.
Error in pinv (line 18)
[U,s,V] = svd(A,'econ','vector');
Error in Project1 (line 21)
c=pinv(a)*Y;
Kindly suggest a solution.I think i need to change my table to double format ..but unable to do so using table2array().
Kindly help.
  1 件のコメント
Stephen23
Stephen23 2023 年 10 月 19 日
編集済み: Stephen23 2023 年 10 月 19 日
"Kindly suggest a solution."
Use numeric arrays for storing basic numeric data (not lots of superfluous nested tables).
Use curly-brace indexing to access table content:
The PINV documentation clearly states that its input must be SINGLE or DOUBLE (i.e. numeric). Instead of doing that, you are providing it with nested tables.
"Convert variables to tables": they are already tables, why nest them inside more tables? Why do you need so many tables? Lets try it without all of those tables, e.g. by using curly-brace indexing:
T = array2table(rand(7,6)); % fake data alternative to READTABLE
Y = T{:,6};
n = height(T);
a = [ones(n,1), T{:,3:5}];
c = pinv(a)*Y % your approach
c = 4×1
0.5321 -0.1422 0.0876 0.2790
c = lsqminnorm(a,Y) % the recommended approach
c = 4×1
0.5321 -0.1422 0.0876 0.2790

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeTables についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by