簡體   English   中英

如何將復雜的 function 應用於 MATLAB 中的 a.csv 文件的每一行?

[英]How to apply a complex function to every row of a .csv file in MATLAB?

我想從 Toker 等人的論文中應用一個帶有特定 function ( chaos ; https://figshare.com/s/80891dfb34c6ee9c8b34 ) 的外部代碼。 2020 ( https://www.nature.com/articles/s42003-019-0715-9#Sec1 ) 以測試我的數據是隨機的還是混亂的。

但是,我對 MATLAB完全陌生,我嘗試過的解決方案都沒有工作(我嘗試過循環、 forcellfun )。

當我嘗試對后者使用以下代碼時:

T = readtable('ibfrq3.csv');
C = table2array(T);
D = num2cell(C, 2);
rowSums = cellfun(@sum, D)
chaos = cellfun(@chaos, D)

我收到三個錯誤:

Unable to perform assignment because the size of the left side is 1-by-14 and the size of the right side is
1-by-3.

Error in chaos>surrogate (line 989)
        surr(k,:)=unwrap(horzcat(st,parts{randperm(j)},en));

Error in chaos (line 157)
            [surr, params] = surrogate(zscore(surr_y), num_surr, 'CPP', 1, 1); 

有趣的是,我能夠使 function 工作,但僅適用於單獨的行(通過將它們復制到方括號中並標記為 y 例如y = [1,2,3,4,5,6,7,8,9,5,6,7,8,8] )。

我想要的 output 是帶有chaos function 輸出的字符串(或者理想情況下是添加到 my.csv 的列)(每行一個字:“隨機”或“混亂”,具體取決於結果)。

我的數據可在此處獲得: https://drive.google.com/file/d/1I2BChrv0iqNr1dcEKTQKxKF7DDl_hF23/view?usp=sharing The.csv 由不同時間段的等位基因頻率組成。

cellfun (及其密切相關的arrayfun )在這里不適合,因為它們將 function 分別應用於數組的每個元素,而您想將 function 應用於每一行。 此外,您正在為chaos分配一個值,該值已經是 function 的名稱,這可能會導致令人困惑的行為。

如果C是一個m x n數值數組,而chaos是一個 function,它以行向量作為輸入並返回一個標量值 output,則

numRows = size(C, 1);
for row = 1:numRows
    result(row) = chaos(C(row,:));
end

將為 C 的每一行創建一個 1 x m向量result ,其中包含 function 的C

如果這不能幫助您回答您的問題,請更新您的問題,詳細說明您嘗試了什么、得到了什么結果以及您想要什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM