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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

NumPy

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

Python

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

Q&A

解決済

1回答

4153閲覧

pythonで2次元配列にデータを挿入するやり方

Yusuke_nomecchi

総合スコア17

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

NumPy

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

Python

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

0グッド

0クリップ

投稿2020/04/04 17:24

pythonを勉強中のものです。
0~11の数をdataという配列にいれた後、xという二次元配列にdata配列をstartの値(下記のコードで言う"-7")まで遡って、それからnum個(下記のコードで言う"4")格納し、それをfor分スライドさせて二次元配列に格納したいというコードになります。
しかしstart=-7,num=4としたとき、最後の要素(data[-4:0])のとき、エラーになります。
実現したいことは二次元配列xがこのようになることです。
[ [ 5. 6. 7. 8.]
[ 6. 7. 8. 9.]
[ 7. 8. 9. 10.]
[ 8. 9. 10. 11.]]←これが現したい

どうすればよろしいでしょうか。

何卒ご教授よろしくお願いいたします。

イメージ説明

python

1import numpy as np 2 3num = 4 4start = -7 5 6data = [] 7for i in range(12): 8 data.append(i) 9 10x = np.zeros((num, num)) 11 12for i in range(num): 13 j = start + i 14 k = j + num 15 x[i] = data[j:k] 16 17print(x)

【自分の環境】
windows10
visual studio 2019 community
python 3

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

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

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

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

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

guest

回答1

0

ベストアンサー

for ループの最後、i が3のとき、 jが -4 で k が 0 となるので、data[j:k] は、data[-4:0]となりますが、これは意図している、[8, 9, 10, 11] にはならず、空のリスト [] になるため、

python

1x[i] = data[j:k]

の代入ができず、画像のとおり

ValueError: cannot copy sequence with size 0 to array axis with dimension 4

というエラーが発生します。ここを修正するには、k が0のとき、x[i] に代入するのは data[j:k]ではなく、kをスライスの終端に使用しないdata[j:]にすればよいので、下記のように修正してみるといかがでしょうか。

diff

1- x[i] = data[j:k] 2+ x[i] = data[j:k] if k < 0 else data[j:]

追記

以下は dataを使わないで、目的の x を作るコードです。

python

1import numpy as np 2 3num = 4 4start = 5 5 6x = np.zeros((num, num)) 7 8for i in range(num): 9 j = start + i 10 k = j + num 11 x[i] = range(j, k) 12 13 14print(x)

投稿2020/04/04 19:30

編集2020/04/04 19:45
jun68ykt

総合スコア9058

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

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

Yusuke_nomecchi

2020/04/05 04:38

解決しました! ありがとうございます!
jun68ykt

2020/04/05 05:05

どういたしまして。 > 解決しました! とのことでよかったです????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問