まず、不必要な作業をたくさんやっているN
。一度に数メガバイトのリストを作成しています(256 * 256 * 256 = 16,777,216追加!)。 p
を構築するためのより良い(より速く、メモリ効率的な)方法は、numpyのの配列放送を使用して、N
を作るためにp
を再利用することです:
import numpy as np
a = np.arange(256)
p = a[:,np.newaxis,np.newaxis] * a[np.newaxis,:,np.newaxis] * a[np.newaxis,np.newaxis,:]
N = p.flatten()
もっと重要なのは第二と、あなたは正確に)(plot_surfaceを使用していません。 docsによると、X、Y、Zは2D配列でなければなりません。 XとYは2Dグリッドをレイアウトし、Zはその2Dグリッド上の各ポイントの「高さ」を提供します。 Facecolorを手動で設定する場合は、2D配列である必要があります。実際の例については、ドキュメントの例を参照する必要があります。
EDIT:
私はそうMPL demoを歩くことができます、あなたのプロットが見えるように意図されているものはよく分かりません。
必要なインポートを実行すると、軸オブジェクトを作成します(あなたはこれを正しく行います):
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
次に、X/Yグリッドを作成し、あなたのプログラムではZ.対応する、X、YおよびZは1Dです。それらはサーフェスではなく3D空間内の線を記述します。
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y) # <-- returns a 2D grid from initial 1D arrays
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
最初に最も簡単なことをプロットします。何色、デフォルトのアンチエイリアシング、ラインなど
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1)
plt.show()
は今色を追加しません。色はZ成分から来ていることに注意してください。
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet)
plt.show()
今手動色(MPL inspiration)を制御します。
colortuple = ('y', 'k') # only use two colors: yellow and black
xlen, ylen = X.shape # get length of
colors = np.empty(X.shape, dtype=str) # make a 2D array of strings
for i in range(xlen):
for j in range(ylen):
index = (i + j) % 2 # alternating 0's and 1's
colors[i,j] = colortuple[index]
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
facecolors=colors)
あなたには、いくつかの他のメトリックに基づいた色にしたい場合は、独自のカラーマップを作成することができます。それを行う方法には多くの答えがあります。
編集2:
色もRGB配列として指定することができます。Yの説明に緑のX上の赤、のようなもののためにあなたがこれを行うことができます:
xlen, ylen = X.shape
colors = np.zeros((xlen,ylen,3))
jspan = np.linspace(0., 1., ylen)
ispan = np.linspace(0., 1., xlen)
for i in range(xlen):
colors[i,:,0] = jspan
for j in range(ylen):
colors[:,j,1] = ispan
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=colors,)
エラーメッセージは正確には何ですか? – kmote
トレースバック(直前の最後の呼び出し): ファイル "C:/Python27/try2.py"、行22、 N.append(prob_Skin [i、j、k]) MemoryErrorはエラーメッセージです –
プログラムのどの部分にメモリエラーがありますか?あなたがNに追加している間ですか?もしそうなら、リスト全体の代わりにジェネレータをcm.jet()に渡すことが可能です。次の行に、N.append(P [i、j、k])を取り、代わりに、ZのKについて、YのjについてXのiのN =(p [i、j、k)] –