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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

1267閲覧

複数のインデックスの配列の値の平均をとり、新たな配列に格納したい

pro

総合スコア28

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/01/18 09:35

配列を何個かセットで和をとり、新たな配列に格納することを目指しています。

例題としてやっていることは

|列1|列2|列3|列4|列5|列6|列7|列8|列9|列10|
|:--|:--:|--:|
|1|2| 3| 4| 5|6|7|8|9|10|


|new列1|new列2|nwe列3|new列4|new列5
|:--|:--:|--:|
|列1+列2の平均|列3+列4の平均| 列5+列6の平均|列7+列8の平均|列9+列10の平均|

ArrayList<Float> sum = new ArrayList<Float>(); ArrayList<Float> data = new ArrayList<Float>(); int l=0; for (int k = 0; k < data.size(); k=k+2) { //実際はk=k+100 for (int i = 0; i < 2; i++) { //ここの書き方に躓いています。ここでは2つだが、100個程度の配列数の平均をとりたい。  sum.add(data2.get(i+k)); } data.add(sum.get(l++)/2); }        for(float s : sum) {          System.out.println(s); }                 

条件として
.Arraylistを使用すること(Arraylistのdataはそのような値を扱うため)data.size()は1000〜10000
.ここでは2つの配列の平均をとっているが、100程度の配列の平均をとりたい。


sumの出力
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0


宜しくお願い致します。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

dataはともかく、sumをリストにする必要は無いのでは。

Java

1import java.util.*; 2 3 4class Main { 5 public static void main(String[] args) { 6 List<Double> src = List.of(1.0, 2.0, 3.0, 4.0); 7 8 final int chunkSize = 2; 9 assert src.size() % chunkSize == 0: "分割幅が不適切"; 10 11 List<Double> data = new ArrayList<>(); 12 for (int i = 0; i < src.size(); i += chunkSize) { 13 double sum = 0; 14 15 for (int j = 0; j < chunkSize; ++j) { 16 sum += src.get(i+j); 17 } 18 data.add(sum / chunkSize); 19 } 20 21 for(double e: data) { 22 System.out.println(e); 23 } 24 } 25}

実行結果 Wandbox

1.5 3.5

おまけ

遊び。Wandbox

Java

1var data = IntStream.iterate(0, pre -> pre+chunkSize) 2 .takeWhile(val -> val < src.size()) 3 .mapToDouble( 4 val -> src.subList(val, val+chunkSize).stream() 5 .mapToDouble(n -> n) 6 .average() 7 .getAsDouble() 8 ) 9 //.peek(System.out::println) 10 .boxed() 11 .collect(Collectors.toList()) 12;

遊び2。Wandbox

  • リストsumsを追加
  • collectしたリストの可変性を保証

Java

1var sums = IntStream.iterate(0, pre -> pre + chunkSize) 2 .takeWhile(n -> n < src.size()) 3 .mapToDouble( 4 val -> src.subList(val, val + chunkSize).stream() 5 .mapToDouble(n -> n) 6 .sum() 7 ) 8 .boxed() 9 .collect(Collectors.toCollection(ArrayList::new)) 10; 11var data = sums.stream() 12 .map(val -> val / chunkSize) 13 .collect(Collectors.toCollection(ArrayList::new)) 14;

投稿2019/01/18 09:46

編集2019/01/18 10:44
LouiS0616

総合スコア35658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pro

2019/01/18 10:21

ご回答ありがとうございます。その後の展開としてsumに値を追加したいと思っているのですが、自分の知識だと固定長配列だと難しいと感じております。従ってsumもlistで扱いたいです。。。
LouiS0616

2019/01/18 10:23

それなら適当に sums とかいうリストを作っておいて、 data.add するときに一緒に sums.add(sum) すれば良いでしょう。
pro

2019/01/18 11:43

ご丁寧にありがとうございます。
guest

0

データの個数が 平均計算する個数の倍数になっていない場合も考慮して書いてみました。

java

1import java.util.ArrayList; 2import java.util.List; 3 4public class Example2XX { 5 static void show_list(List<Float> list) { 6 for (Float x : list) { 7 System.out.print(" " + x); 8 } 9 System.out.println(); 10 } 11 12 static List<Float> calc(List<Float> data, final int size) { 13 List<Float> sums = new ArrayList<Float>(); 14 15 final int len = data.size(); 16 float sum = 0; 17 int count = 0; 18 for (int i = 0; i < len; i++) { 19 sum += data.get(i); 20 count++; 21 if (((0 < i) && (count == size)) || (i == len - 1)) { 22 sums.add(sum / count); 23 sum = 0; 24 count = 0; 25 } 26 } 27 return sums; 28 } 29 30 public static void main(String[] args) { 31 ArrayList<Float> data = new ArrayList<Float>(); 32 for (int i = 1; i <= 10; i++) { 33 data.add((float) i); 34 } 35 36 show_list(data); 37 show_list(calc(data, 2)); 38 show_list(calc(data, 3)); 39 show_list(calc(data, 4)); 40 } 41}

実行例
イメージ説明

投稿2019/01/19 02:10

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pro

2019/01/19 09:30

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問