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

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

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

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

Q&A

解決済

3回答

3637閲覧

[python]要素数が異なるリストを重ねて作った「リストのリスト」を2次元配列とみなして行・列の転置をしたい。

HoriemonHack

総合スコア54

Python

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

0グッド

0クリップ

投稿2022/07/23 06:18

編集2022/07/23 06:20

やりたいこと

配列[1,2]と[4,5,6]を使って以下の2次元配列Matrixを作ります。

Matrix =
1 2
4 5 6

その後、Matrix の行・列を転置させたMatrix_tを作ります。

Matrix_t =
1 4
2 5
6

Matrix 既に与えられているので、これを用いてMatrix_t を作り出したい。

困っていること

Matrix_t を作って表示させたが、期待通りの結果にならない。
配列[1,2,3]と[4,5,6]だと期待通り、転置されるが、要素数が異なる配列[1,2]と[4,5,6]だと、以下の実行例のように転置されない。
解決法をご教授いただきたいです。

ソース

python

1import pandas 2import numpy 3 4list1 = [1,2] 5list2 = [4,5,6] 6 7Matrix = [] 8Matrix.append(list1) 9Matrix.append(list2) 10 11print(Matrix) 12Matrix_t = numpy.array(Matrix).T 13print(Matrix_t) 14

出力

[[1, 2], [4, 5, 6]]
[list([1, 2]) list([4, 5, 6])]

C:\User\AppData\Local\Temp/ipykernel_3028/3663226603.py:12: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
Matrix_t = numpy.array(Matrix).T

期待していた出力(やりたいこと)

[[1 4]
[2 5]
[ 6]]

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

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

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

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

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

guest

回答3

0

ベストアンサー

Python

1import itertools 2 3m = [[1,2],[4,5,6]] 4x = list(itertools.zip_longest(*m)) 5print(x) 6 7y = list(map(lambda w: list(filter(lambda v: v is not None, w)), x)) 8print(y)

xyのどっちか欲しい方。

投稿2022/07/23 09:24

編集2022/07/23 09:28
otn

総合スコア84553

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

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

0

※ 元の Matrix の要素に None が含まれていない場合

python

1width = max(map(len, Matrix)) 2Matrix = [m + [None]*(width-len(m)) for m in Matrix] 3tranpose = [[*filter(None, l)] for l in zip(*Matrix)] 4print(tranpose)

投稿2022/07/23 06:53

melian

総合スコア19780

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

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

0

それは行列ではないからです。行列とはn行m列という形式になります。

投稿2022/07/23 06:44

East_san

総合スコア407

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

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

HoriemonHack

2022/07/23 06:56

ご回答ありがとうございます。 では、質問を変えますが、 配列[1,2]と[4,5,6]から、 Matrix_t = 1 4 2 5 6 '' という2次元配列を作るにはどのようにすればよろしいでしょうか? 要素数が欠けているところを良しなに空文字''にしたいのですが。。。
East_san

2022/07/23 07:25

転置の考えとは大きく異なるような気がします。 転置で考えるのであれば、期待される結果は以下の用になると思います [['1' '4'] ['2' '5'] ['' '6']] これであればご質問者様の以下の部分 list1 = [1,2] を list1 = [1,2, ""] に変更するだけで実行できます。
HoriemonHack

2022/07/23 09:06

ありがとうございます。 すみません、少し戻るのですが、 なぜ例で作ったMatrixは「行列ではない」のでしょうか? 元となるリストの要素数が一致していないからでしょうか? それとも、list.append()がつくるものが行列ではない、という意味でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問