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

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

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

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

Q&A

解決済

3回答

5251閲覧

list内の行列の要素入れ替え方法

mori_takeshi

総合スコア10

Python

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

0グッド

0クリップ

投稿2017/12/06 17:51

編集2017/12/06 18:20

###前提・実現したいこと
以下のようなnumpy行列を要素に持つlistを考えたとき
list内の行列に対して、行列の特定の2つの行の入れ替えを行うプログラムを作ろうと思っています。

行列のみの場合、numpy.copyで該当の2か所の値を保存して、代入することで入れ替えができたのですが、
listに含まれる行列の場合、numpy.copyで異なるもの(アドレスか何か)が保存され、代入の際に
TypeErrorが返ってきてしまいました。

このような場合、行列の特定の2つの列の入れ替えを行う関数や方法等がありましたら教えていただきたいです。

list[ array[[]] ,…, array[[]] ]
array=[[1,2],[3,4],[5,6]]

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

list1[0][0] = pool TypeError: long() argument must be a string or a number, not 'builtin_function_or_method'

###該当のソースコード

python

1import numpy as np 2x = np.random.randint(0, 10, size=(3,2)) 3y = np.random.randint(0, 10, size=(3,2)) 4list1 = [x,y] 5pool = list1[0][1].copy #修正箇所 6pool2 = list1[0][0].copy #修正箇所 7list1[0][0] = pool 8list1[0][1] = pool2

###修正箇所
ご指摘ありがとうございます。
.copyを記載し忘れておりました。
該当コード5,6行目が上のようになります。
よろしくお願いいたします。

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

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

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

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

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

LouiS0616

2017/12/06 18:00

エラーが発生したのは『該当のソースコード』ですか?2.7でも3.xでもエラーが再現しないのですが。
guest

回答3

0

copyにかっこつけ忘れてませんか?
copyだけだとfunctionなのでlist[0][0]に入らないですよ。

python

1pool = list1[0][1].copy() 2pool2 = list1[0][0].copy() 3list1[0][0] = pool 4list1[0][1] = pool2 5print(list1)

投稿2017/12/06 23:26

y__sama

総合スコア83

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

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

mori_takeshi

2017/12/07 02:59

回答ありがとうございます。指摘された方法で解決いたしました。
guest

0

ベストアンサー

修正箇所 list1[0][0].copy は list1[0][0].copy() であるべきかと。

投稿2017/12/06 23:18

hiro-k

総合スコア902

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

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

mori_takeshi

2017/12/07 02:59

回答ありがとうございます。指摘された方法で解決いたしました。
guest

0

一般に同一の値(Pythonの同一のオブジェクト)VALUEが変数自体に入っていようが、リストの特定要素に入っていようが、VALUEに対してできることは同じです。VALUEのことをさす書き方がvarvar[i]かの違いだけです。

行列のみの場合、numpy.copyで該当の2か所の値を保存して、代入することで入れ替えができた

つまり

xについてならnumpy.copyでできてlist1[0]に対してだと同じようにしてもできなかった

ということだと思います。多分それは注意不足だと思います。書き方に何か違いがあったはずです。

投稿2017/12/06 23:20

KSwordOfHaste

総合スコア18392

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

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

mori_takeshi

2017/12/07 03:01

回答ありがとうございます。ご指摘の通り、書き方に違いがありました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問