How to apply function on columns while skipping certain columns

1 回表示 (過去 30 日間)
Zuha Yousuf
Zuha Yousuf 2020 年 3 月 19 日
コメント済み: Zuha Yousuf 2020 年 3 月 19 日
So I have a matrix that has 31413 rows and 950 columns. I want to apply a function starting from column 2 till column 10, skipping column 11, then applying the same function from coumn 12 till column 20, then skipping column 21 and applying the function on column 22 till column 30 and so on.
Basically something like this
[col1 col2...col10 col11 col12...col20 col21 col22...col30 and so on until column 950]
(the columns in between are where I want to apply the function basically)
Is there any way I can do this? Any help appreciated!!!
  2 件のコメント
James Tursa
James Tursa 2020 年 3 月 19 日
What is the function?
Zuha Yousuf
Zuha Yousuf 2020 年 3 月 19 日
It's tril. For creating a triangular matrix.

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

採用された回答

Sriram Tadavarty
Sriram Tadavarty 2020 年 3 月 19 日
Hi Zuha,
You can use a for loop as below and it does what is required, provided you expect the same amount of size in rows and columns from the anonymous function:
m = rand(31413,950);
for i = 2:10:size(m,2)
m(:,i:i+8) = anonymousFun(m(:,i:i+8)); % anonymousFun could be tril, provided you wanted to get the same size of matrix
end
Hope this helps.
Regards,
Sriram

その他の回答 (1 件)

Mohammad Sami
Mohammad Sami 2020 年 3 月 19 日
m = rand(31413,950);
allcols = 1:950;
exccols = 1:10:950;
applcols = allcols(~ismember(allcols,exccols));
out = max(m(:,applcols)); % some builtin functions can be used directly
% or
out = arrayfun(@(x)max(m(:,x)),applcols);
  2 件のコメント
Zuha Yousuf
Zuha Yousuf 2020 年 3 月 19 日
Hi! when I do as you say, it only gives me those columns I applied the function on as output. As my output, I also need the columns I skipped over when applying the function.
Like this:
[col1 appliedfunction(col2...col10) col11 appliedfunction(col12...col20) and so on until col950]
Zuha Yousuf
Zuha Yousuf 2020 年 3 月 19 日
編集済み: Zuha Yousuf 2020 年 3 月 19 日
And also, i want that the function be applied only from col2 till col 10, and then separately on col 12 till col 20 and so on. For example, you used max on all the columns aside from the ones I wanted excluded. I need max to be used individually again and again on these small subsets of the matrix. Is there a way to do that?

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

カテゴリ

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

Community Treasure Hunt

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

Start Hunting!

Translated by