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

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

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

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

NumPy

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

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

配列

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

Q&A

解決済

1回答

1227閲覧

配列の前半と後半を入れ替えて違う配列に入れたい

ryokkun0331

総合スコア2

多次元配列

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

NumPy

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

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

配列

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

0グッド

0クリップ

投稿2020/10/23 10:46

前提・実現したいこと

当該プログラムの#配列の入れ替えg→0含まずg2→0含む のユニット
111行目
1001個ある配列(iso0)の前半500個を後半500個の後ろに挿入したい
(時間で-500^-120500^-12で設定している関数を周期関数として0500^-121000^-12の配列に入れる)
(変換前 -500^-12 ~ -1^-12 , 0 , 1^-12 ~ 500^-12
(変換後 0 , 1^-12 ~ 500^-12 , -500^-12 ~ -1^-12

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

Traceback (most recent call last):
File "C:\Users\oreka\python\2jigen3.py", line 112, in <module>
iso0g[i] = iso0[i+501]
OverflowError: Python int too large to convert to C long

該当のソースコード

python

1import numpy as np 2import math 3import matplotlib.pyplot as plt 4 5#定数宣言 6a = np.arange(-500.0e-12,600.0e-12,1.0e-12) #500.0e-12~600.0e-12の時間t(要素1100個) 7a2 = np.arange(1,1000,1) #1~1000の整数(kの一行に要素が3つある行の代入に使用) 8a3 = np.arange(-500.0e-12,500.0e-12,1.0e-12) #-500.0e-12~500.0e-12の時間t(要素1001個) 9a4 = np.arange(0,1000.0e-12,1.0e-12)#グラフ用の時間t 10iso0g = np.arange(0,1001,1)#配列入れ替え後の入れもん 11g = np.arange(0,500,1)#0含まない 12g2 = np.arange(501,1001,1)#0含む 13k = np.eye(1001) #kの土台(単位行列(1001×1001)) 14A = 100 15B = 217.0e-28 16z = 30.0e+3 17T = 18016836.0e-18 18dz = 15000 19 20#p(t,z)とdp/dzの作成 21p = pow(A * T ,2) / np.sqrt(pow(T ,4)+pow(B * z ,2)) * np.exp((-1 * pow(T* a ,2))/(pow(T ,4)+pow(B * z ,2))) 22#p(a3サイズ) 23pa3 = pow(A * T ,2) / np.sqrt(pow(T ,4)+pow(B * z ,2)) * np.exp((-1 * pow(T* a3 ,2))/(pow(T ,4)+pow(B * z ,2))) 24#p1a3(t+dz) 25p1a3 = pow(A * T ,2) / np.sqrt(pow(T ,4)+pow(B * (z + dz) ,2)) * np.exp((-1 * pow(T* a3 ,2))/(pow(T ,4)+pow(B * (z + dz) ,2))) 26#p2a3(t-dz) 27p2a3 = pow(A * T ,2) / np.sqrt(pow(T ,4)+pow(B * (z - dz) ,2)) * np.exp((-1 * pow(T* a3 ,2))/(pow(T ,4)+pow(B * (z - dz) ,2))) 28 29dpdz = pow(A * T * B ,2) * z * ((2 * pow(T* a3 ,2))/(pow(T ,4)+pow(B * z ,2)) - 1) * pow(pow(T ,4) 30 + pow(B * z ,2) , -1.5) * np.exp(-1 * pow(T* a3 ,2)/(pow(T ,4) + pow(B * z ,2))) 31 32pp = (p1a3 - pa3)/dz#前進差分 33pp2 = (p1a3 - p2a3) /2 /dz#中心差分 34 35#dp/dzの行列を縦一列に変形 36dpdz = dpdz.reshape([1001,1]) 37pp = pp.reshape([1001,1]) 38pp2 = pp2.reshape([1001,1]) 39 40#k(単位行列(1001×1001))の2~1000行にpを繰り返し代入 ※一行に要素が3つある行 41for i in a2: 42 k[i][i-1] = p[i+1] + p[i+2] 43 k[i][i] = -(p[i+1] + 2*p[i+2] + p[i+3]) 44 k[i][i+1] =p[i+2] + p[i+3] 45 46#kの1行目と1001行目にpを代入 ※一行に要素が2つある行 47k[1000][1000] = -(p[1001] + 2*p[1002] + p[1003]) 48k[1000][999] = p[1001] + p[1002] 49k[0][0] = -(p[1] + 2*p[2] + p[3]) 50k[0][1] = p[2] + p[3] 51 52 53kin = np.linalg.inv(k) #kの逆行列kin 54 55b = dpdz / dz / B #作成とb(dpdz)の作成 56b2 = pp / dz / B #b2(前進差分) 57b3 = pp2 / dz / B #b3(中心差分) 58 59 60#各配列にどれだけ要素が入っているかの確認用(shape) 61""" 62print("a") 63print(a.shape) 64print("a2") 65print(a2.shape) 66print("a3") 67print(a3.shape) 68print("k") 69print(k.shape) 70print("p") 71print(p.shape) 72print("dpdz") 73print(dpdz.shape) 74print("kin") 75print(kin.shape) 76""" 77 78#各行列の確認用(shape) 79np.set_printoptions(linewidth=2000,edgeitems=7,precision=4, floatmode='maxprec') 80print("k") 81print(k) 82print("p") 83print(p) 84print("dpdz") 85print(dpdz) 86print("b") 87print(b) 88print("kin") 89print(kin) 90 91#3.13式よりφを計算 92 93iso0 = kin @ b#iso0 b=dpdz 94iso0 = iso0.reshape([1001,]) 95print("iso0") 96print(iso0.shape) 97print(iso0) 98 99iso = kin @ b2#iso b=前進差分 100iso = iso.reshape([1001,]) 101print("iso") 102print(iso.shape) 103print(iso) 104 105iso2 = kin @ b3#iso2 b=中心差分 106iso2 = iso2.reshape([1001,]) 107print("iso2") 108print(iso2.shape) 109print(iso2) 110 111#配列の入れ替えg→0含まずg2→0含む 112for i in g: 113 iso0g[i] = iso0[i+501] 114 115for i in g2: 116 iso0g[i] = iso0[i-501] 117 118#iso確認用 119print("iso0") 120print(iso0g) 121print(iso0g.shape) 122 123 124#各行列のPLOt 125plt.figure(0) 126plt.xlabel("t") 127plt.ylabel("p(t,z)") 128plt.plot(a,p) 129 130plt.figure(1) 131plt.xlabel("t") 132plt.ylabel("bとpp") 133plt.plot(a3,dpdz) 134plt.plot(a3,pp) 135plt.plot(a3,pp2) 136 137plt.figure(2) 138plt.xlabel("t") 139plt.ylabel("φ") 140plt.plot(a3,iso0) 141plt.plot(a3,iso) 142plt.plot(a3,iso2) 143 144plt.show()

試したこと

配列の要素数を変更したりしました

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

コード全体にいろいろ改善ポイントは多いですが、最初の宣言を以下のようにすると、エラーは出なくなります。

宣言において、iso0gを整数の配列としているのに対して、整数値の上限を超えるfloat値を代入しようとしたため、OverflowError: Python int too large to convert to C longというエラーが発生していました。そのため宣言部分でfloatの配列になるように.0を少し加えてあげると、解決します。

Python

1iso0g = np.arange(0,1001,1.0)#配列入れ替え後の入れもん

投稿2020/10/23 11:08

toast-uz

総合スコア3266

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問