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

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

新規登録して質問してみよう
ただいま回答率
85.48%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

534閲覧

配列の分割方法がわかりません。

kai_15

総合スコア8

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/01/22 21:00

編集2020/01/22 21:54

前提・実現したいこと

[[array([ 26. , 640.3064, 474.5399], dtype=float32), array([637.5512 , 472.82175, 9.763 ], dtype=float32)],
[ array([ 36. , 1103.3015, 682.2389], dtype=float32), array([1103.4739, 682.4497, 6.819 ], dtype=float32)],
[ array([ 57. , 912.45087, 1095.1106 ], dtype=float32), array([ 911.432, 1093.934, 6.069], dtype=float32)]]

上記のような形に持っていきたいです。

発生している問題・エラーメッセージ

[array([ 26. , 640.3064, 474.5399], dtype=float32), array([637.5512 , 472.82175, 9.763 ], dtype=float32), array([ 36. , 1103.3015, 682.2389], dtype=float32), array([1103.4739, 682.4497, 6.819 ], dtype=float32), array([ 57. , 912.45087, 1095.1106 ], dtype=float32), array([ 911.432, 1093.934, 6.069], dtype=float32)] 現在は上記のようになっています。

該当のソースコード

dummy = [] kati = [] maruhi = [] # print(hako4[0][1][1]) dummy.append(np.sqrt(Nx + Ny))#画像の一番大きいところを入れとく # print(dummy) for k in range(len(hako4)): # kati.clear() kati.append(hako4[k][0]) for i in range(len(hako4)): maruhi.append(np.sqrt(hako4[k][i][0] + hako4[k][i][1])) if dummy > maruhi : dummy = maruhi koko = i+1 maruhi.clear() kati.append(hako4[k][koko]) hako5 = kati

試したこと

スライスで分割してみたりしましたが、いまいちわかりませんでした。

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

言語は[python3系]を使用しています。
エディタは[Atom]を使用しています。
Windowsです。
~
from astropy.io import fits
import numpy as np
import os
import matplotlib.pyplot as plt
import math
使うかわかりませんが入れているものです。
~
上記の該当ソースコードで発生している問題の状況までもってきました。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

内包表記を使って

Python

1ret = [[d1, d2] for d1,d2 in zip(data[0::2], data[1::2])]

で良いかと思います。

動作確認

Python

1import numpy as np 2from pprint import pprint 3data = [np.array([ 26. , 640.3064, 474.5399], dtype='float32'), 4 np.array([637.5512 , 472.82175, 9.763 ], dtype='float32'), 5 np.array([ 36. , 1103.3015, 682.2389], dtype='float32'), 6 np.array([1103.4739, 682.4497, 6.819 ], dtype='float32'), 7 np.array([ 57. , 912.45087, 1095.1106 ], dtype='float32'), 8 np.array([ 911.432, 1093.934, 6.069], dtype='float32')] 9pprint(data) 10#[array([ 26. , 640.3064, 474.5399], dtype=float32), 11# array([637.5512 , 472.82175, 9.763 ], dtype=float32), 12# array([ 36. , 1103.3015, 682.2389], dtype=float32), 13# array([1103.4739, 682.4497, 6.819 ], dtype=float32), 14# array([ 57. , 912.45087, 1095.1106 ], dtype=float32), 15# array([ 911.432, 1093.934, 6.069], dtype=float32)] 16 17ret = [[d1, d2] for d1,d2 in zip(data[0::2], data[1::2])] 18pprint(ret) 19#[[array([ 26. , 640.3064, 474.5399], dtype=float32), 20# array([637.5512 , 472.82175, 9.763 ], dtype=float32)], 21# [array([ 36. , 1103.3015, 682.2389], dtype=float32), 22# array([1103.4739, 682.4497, 6.819 ], dtype=float32)], 23# [array([ 57. , 912.45087, 1095.1106 ], dtype=float32), 24# array([ 911.432, 1093.934, 6.069], dtype=float32)]]

上記の内包表記は、通常のループ処理に書き換えると

Python

1ret = [] 2for d1, d2 in zip(data[0::2], data[1::2]): 3 ret.append([d1,d2])

となります


【補足】
現在のデータは numpy配列がリストに格納されている形式になっておりますが、numpyにて2次元配列に変換して、3次元配列に書き換える処理を行った方が後々の処理も含めて楽な気がします。

import numpy as np from pprint import pprint data = [np.array([ 26. , 640.3064, 474.5399], dtype='float32'), np.array([637.5512 , 472.82175, 9.763 ], dtype='float32'), np.array([ 36. , 1103.3015, 682.2389], dtype='float32'), np.array([1103.4739, 682.4497, 6.819 ], dtype='float32'), np.array([ 57. , 912.45087, 1095.1106 ], dtype='float32'), np.array([ 911.432, 1093.934, 6.069], dtype='float32')] # 2次元配列化 data = np.array(data) pprint(data) #array([[ 26. , 640.3064 , 474.5399 ], # [ 637.5512 , 472.82175, 9.763 ], # [ 36. , 1103.3015 , 682.2389 ], # [1103.4739 , 682.4497 , 6.819 ], # [ 57. , 912.45087, 1095.1106 ], # [ 911.432 , 1093.934 , 6.069 ]], dtype=float32) # 3次元配列に変換 (6,3) => (3,2,3) data = data.reshape(3,2,3) pprint(data) #array([[[ 26. , 640.3064 , 474.5399 ], # [ 637.5512 , 472.82175, 9.763 ]], # [[ 36. , 1103.3015 , 682.2389 ], # [1103.4739 , 682.4497 , 6.819 ]], # [[ 57. , 912.45087, 1095.1106 ], # [ 911.432 , 1093.934 , 6.069 ]]], dtype=float32)

投稿2020/01/22 23:27

編集2020/01/22 23:37
magichan

総合スコア15898

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

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

kai_15

2020/01/22 23:48

回答ありがとうございました。 numpy配列についてもしっかり理解しきれていないのでアドバイスとても助かります! numpy配列についても自分でもう一度調べてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問