質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.83%
MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

Q&A

解決済

for loopを減らしたい

ytkytk
ytkytk

総合スコア8

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

1回答

0グッド

0クリップ

1263閲覧

投稿2018/06/21 23:22

前提・実現したいこと

for loopを減らしたい
プログラミング初心者です。プログラミングをするにあたり、for loopを多用してしまい、計算時間が長くなってしまっています。
計算時間を短くするためのヒント、知恵、方法を教えて頂けないでしょうか。
2つあります。1つ目はシンプルなものです。

簡略化したいコード①

%A内の全てのセルを結合
[p,q] = size(A)
A_combined = A{1,1}
for n = 2 : p
A_combined = [A_combined;A{1,n}]
end

簡略化したいコード②

読み込んだグレースケール画像の色彩強度を、指定したWindow毎に平均値をとるプログラムです。

%Clearing all the variables, command window. This is optional%
clear all
clc
close all

色彩強度を得ます
%Taking in the images and playing with them%
list = dir('*.bmp')
% for k = 1:length(list)
for k = 1

image{k}= imread(list(k).name)
[xmax, ymax] = size(image{k})

Windowのサイズを指定します
%Window sizes%
wsize = [16,16]
w_width = wsize(1)
w_height = wsize(2)

%specify grid points%(Change the start number and end numbers)
start = 1
xmin = w_width/2
ymin = w_height/2
xgrid = start:w_width/2:xmax-xmin
ygrid = start:w_height/2:ymax-ymin

%Numbere of windows in total
xgrid_count = length(xgrid)
ygrid_count = length(ygrid)
w_xcount = length(xgrid)-1
w_ycount = length(ygrid)-1

%A place to accomodate the mean values
Mean_I{k} = zeros(w_xcount, w_ycount)

mean_row = 0
mean_column = 0
mean_I = 0

%0.5pix is slided from where the vectors on PIVlab are on purpouse. If this error is too
%big of a deal, this should be fixed. this is caused by the defference between 1-32,33-64... and
%1-33,33-64...
簡略化したいところは、ここからです。

for i=1:(w_xcount)
for j=1:(w_ycount)
win_xmin = xgrid(i)
win_xmax = xgrid(i)+w_width-1
win_ymin = ygrid(j)
win_ymax = ygrid(j)+w_height-1

X = image{k}(win_xmin:win_xmax,:) XY = X(:,win_ymin:win_ymax) Mcol = mean(XY) Mrow = mean(Mcol,2) Mean_I{k}(i,j) = Mrow end

end

end

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

1

ベストアンサー

1:[A{:}]で横向きに結合できる。これを参考に試行錯誤してください。
2:長いので読む気がしません。スルーします。

投稿2018/06/22 00:41

WathMorks

総合スコア1582

ytkytk👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

ytkytk

2018/06/22 17:17

1つめについて、ありがとうございます。 早速試してみます。 2つめについて、申し訳ありませんでした。質問を簡潔にしたものを別投稿しましたので、そちらを見て頂けると幸いです。 https://teratail.com/questions/132529?modal=q-comp
AliHassan

2018/06/22 17:32

execellent knowledge

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.83%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。