1

私はnumpyで抱えている問題への答えを必要として、3時間近くネットを検索してきました。

.csv ファイルから numpy 配列にデータを読み込んで、matplotlib を使用せずに 3D サーフェス プロットにデータをプロットしています。データ取得はpythonのcsvモジュールで行います。ヘッダーが 1 つの配列に読み込まれ、最初の列が別の配列に読み込まれ、これら 2 つの軸の値に属する残りのデータが 3 番目の配列に読み込まれます。

まず、「string」配列と「float」配列を混在させずに適切に表示できるように、「Y」配列を float に変換する必要があることを確認しましたが、これは修正されました。私のプログラムは、「2.633e-12」のような値が見つかるまで、Y 配列の文字列を適切に変換します。

ValueError: float() の無効なリテラル: 2.673e-

変換前に配列から対応する値を出力すると、上記のように出力されます。

以下の完全なプログラムコードを参照してください...

あなたが提供できる助けをいただければ幸いですので、事前に感謝します...

ティム

編集:

トレースバック:

Traceback (most recent call last):
  File "Velocities.py", line 49, in <module>
    surf = ax.plot_surface(X, Y, avel, rstride=1, cstride=1, cmap=cm.jet)
  File "/usr/bin/epd_free/lib/python2.7/site-packages/mpl_toolkits/mplot3d/axes3d.py", line 1453, in plot_surface
    self.auto_scale_xyz(X, Y, Z, had_data)
  File "/usr/bin/epd_free/lib/python2.7/site-packages/mpl_toolkits/mplot3d/axes3d.py", line 392, in auto_scale_xyz
    self.xy_dataLim.update_from_data_xy(np.array([x, y]).T, not had_data)
  File "/usr/bin/epd_free/lib/python2.7/site-packages/matplotlib/transforms.py", line 854, in update_from_data_xy
    path = Path(xy)
  File "/usr/bin/epd_free/lib/python2.7/site-packages/matplotlib/path.py", line 112, in __init__
    vertices = np.asarray(vertices, np.float_)
  File "/usr/bin/epd_free/lib/python2.7/site-packages/numpy/core/numeric.py", line 235, in asarray
    return array(a, dtype, copy=False, order=order)
ValueError: invalid literal for float(): 2.673e-

入力ファイルからエラーを生成する行の前後の行:

2.57e-12;-243.476064488;-243.476064488;-243.476064488;-243.476064488;-243.476064488;-243.476064488;-243.476064488;-243.476064488;-243.476064488;-243.476064488;-243.476064488;-243.476064488;-243.476064488;-243.476064488;-243.476064488;-243.476064488;-243.476064488;-243.476064488;-243.476064488;-243.476064488;-243.476064488;-243.476064488
2.673e-12;-243.747334317;-243.747334317;-243.747334317;-243.747334317;-243.747334317;-243.747334317;-243.747334317;-243.747334317;-243.747334317;-243.747334317;-243.747334317;-243.747334317;-243.747334317;-243.747334317;-243.747334317;-243.747334317;-243.747334317;-243.747334317;-243.747334317;-243.747334317;-243.747334317;-243.747334317
2.772e-12;-244.067736958;-244.067736958;-244.067736958;-244.067736958;-244.067736958;-244.067736958;-244.067736958;-244.067736958;-244.067736958;-244.067736958;-244.067736958;-244.067736958;-244.067736958;-244.067736958;-244.067736958;-244.067736958;-244.067736958;-244.067736958;-244.067736958;-244.067736958;-244.067736958;-244.067736958

この問題を解決するのに役立つ回答をいただければ幸いです...

EDIT2:

ここに私が理解した完全なコードがあります.floatへの変換は問題ありませんが、表面プロット自体がトレースバックを引き起こします...

#!/usr/bin/epd_free/bin/python2.7
# -*- coding: utf-8 -*-

##all the necessary imports
import matplotlib as mpl
import matplotlib.pyplot as plt
#import math as m
import csv
import numpy as np
from matplotlib import cm
#from matplotlib.ticker import LinearLocator, FormatStrFormatter
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.ticker as ticker

##reading the data
#reading the velocity profiles from the "velProfiles"
eingabe = "velProfiles_kum.csv"

dat = csv.reader(open(str(eingabe), 'rb'), delimiter=';')

X=dat.next()
X.pop(0)
X=np.array(X)

Y=[]
avel=[]
for i,row in enumerate(dat):
    if i%100 == 0:
        Y.append(row.pop(0))
        avel.append([float(item) for item in row])#if item is not ''
del dat
#Y=np.array(Y)
Y=np.array(Y).astype(np.float64)
avel=np.array(avel) # converting the list into an array to be able to process it with the 3D plotting engine.

##creating the graph and the mesh needed to plot the data. (get the dimensions right!!!)
fig = plt.figure(frameon=False)
ax = fig.gca(projection='3d', lod=True)
X, Y = np.meshgrid(X, Y)

print("X: " + str(X.shape) + "| Y: " + str(Y.shape) + "| Z: " + str(avel.shape)) # to stdout to check the arrays' dimensions

#plotting the surface
surf = ax.plot_surface(X, Y, avel, rstride=1, cstride=1, cmap=cm.jet)

#setting the title and the labels
plt.xlabel("x")
plt.ylabel("t")
plt.title("The simulation's velocity profiles plotted over time and space")

#layout refinements
#plt.tight_layout()
#fig.colorbar(surf, shrink=.8, aspect=12) #create the colorbar after the tight_layout() command to prevent it from being drawn inside the figure.

#show it!
plt.show()
4

0 に答える 0