0

numpy.savetxt() を使用して、float を含む配列を at ファイルに保存したいと考えています。浮動小数点数は 10 進数でなければなりません (指数関数的ではありません!)。

コードは次のとおりです。

wav = 1./w
wav = np.array(sorted(wav))
efittet = permfitfuncLD(params1[0], params1[1:],1./wav).real
eefittet = permfitfuncLD(params1[0], params1[1:],1./wav).imag
etoprint = [float(s) for s in ["%.5f" % i for i in efittet]]
eetoprint = [float(s) for s in ["%.5f" % i for i in eefittet]]
wavtoprint = [float(s) for s in ["%.5f" % i for i in wav]]
print "--------------------------------------------------------------------"
print "etoprint"
print etoprint
print "--------------------------------------------------------------------"
print "eetoprint"
print eetoprint
print "--------------------------------------------------------------------"
print "wavtoprint"
print wavtoprint
print "--------------------------------------------------------------------"
arr = np.array([wavtoprint,etoprint,eetoprint]).transpose()
print "txt to safe should contain: ", arr

wそれparams自体が複雑な関数 permfitfuncLD() のいくつかのパラメーターです。出力は次のとおりです。

--------------------------------------------------------------------
etoprint
[0.50391, 0.44551, 0.37837, 0.29117, 0.19734, 0.09081, -0.03854, -0.17022, -0.325, -0.47742, -0.63656, -0.8125, -0.9728, -1.13589, -1.26684, -1.36734, -1.42736, -1.42551, -1.3545, -1.23074, -1.07199, -0.90215, -0.79518, -0.78347, -0.899, -1.14185, -1.51655, -1.87591, -2.07595, -1.89561, -1.53701, -1.56583, -2.20596, -3.38828, -4.77624, -6.39743, -8.43319, -10.62524, -13.43619, -16.55797, -20.35308, -25.49629, -31.56653, -40.21232, -51.0312, -66.09163, -90.35934, -125.69555, -188.95742]
--------------------------------------------------------------------
eetoprint
[3.51955, 3.48008, 3.44968, 3.42508, 3.41183, 3.40951, 3.4217, 3.44898, 3.49899, 3.5671, 3.6595, 3.79075, 3.94391, 4.14716, 4.3697, 4.62296, 4.92274, 5.20694, 5.49578, 5.71423, 5.85755, 5.90724, 5.8566, 5.72561, 5.58159, 5.4753, 5.48067, 5.66307, 6.04179, 6.30754, 6.06509, 5.20939, 4.3096, 3.51667, 2.98072, 2.59107, 2.28845, 2.09188, 1.9525, 1.88784, 1.89048, 1.98989, 2.20993, 2.67266, 3.45841, 4.87942, 7.80959, 13.04591, 25.27873]
--------------------------------------------------------------------
wavtoprint
[0.18787, 0.19165, 0.19527, 0.19935, 0.20327, 0.20735, 0.21196, 0.2164, 0.22142, 0.22627, 0.23134, 0.23709, 0.24265, 0.24899, 0.25514, 0.2616, 0.26897, 0.27616, 0.2844, 0.29244, 0.30096, 0.31077, 0.3204, 0.33154, 0.34253, 0.35428, 0.36794, 0.38153, 0.39742, 0.41332, 0.43054, 0.4509, 0.47147, 0.49599, 0.52099, 0.54866, 0.58214, 0.6169, 0.65956, 0.70453, 0.75608, 0.82117, 0.89206, 0.9841, 1.08769, 1.21565, 1.39322, 1.61035, 1.93745]
--------------------------------------------------------------------
txt to safe should contain:  [[  1.87870000e-01   5.03910000e-01   3.51955000e+00]
 [  1.91650000e-01   4.45510000e-01   3.48008000e+00]
 [  1.95270000e-01   3.78370000e-01   3.44968000e+00]
 [  1.99350000e-01   2.91170000e-01   3.42508000e+00]
 [  2.03270000e-01   1.97340000e-01   3.41183000e+00]
 [  2.07350000e-01   9.08100000e-02   3.40951000e+00]
 [  2.11960000e-01  -3.85400000e-02   3.42170000e+00]
 [  2.16400000e-01  -1.70220000e-01   3.44898000e+00]
 [  2.21420000e-01  -3.25000000e-01   3.49899000e+00]
 [  2.26270000e-01  -4.77420000e-01   3.56710000e+00]
 [  2.31340000e-01  -6.36560000e-01   3.65950000e+00]
 [  2.37090000e-01  -8.12500000e-01   3.79075000e+00]
 [  2.42650000e-01  -9.72800000e-01   3.94391000e+00]
 [  2.48990000e-01  -1.13589000e+00   4.14716000e+00]
 [  2.55140000e-01  -1.26684000e+00   4.36970000e+00]
 [  2.61600000e-01  -1.36734000e+00   4.62296000e+00]
 [  2.68970000e-01  -1.42736000e+00   4.92274000e+00]
 [  2.76160000e-01  -1.42551000e+00   5.20694000e+00]
 [  2.84400000e-01  -1.35450000e+00   5.49578000e+00]
 [  2.92440000e-01  -1.23074000e+00   5.71423000e+00]
 [  3.00960000e-01  -1.07199000e+00   5.85755000e+00]
 [  3.10770000e-01  -9.02150000e-01   5.90724000e+00]
 [  3.20400000e-01  -7.95180000e-01   5.85660000e+00]
 [  3.31540000e-01  -7.83470000e-01   5.72561000e+00]
 [  3.42530000e-01  -8.99000000e-01   5.58159000e+00]
 [  3.54280000e-01  -1.14185000e+00   5.47530000e+00]
 [  3.67940000e-01  -1.51655000e+00   5.48067000e+00]
 [  3.81530000e-01  -1.87591000e+00   5.66307000e+00]
 [  3.97420000e-01  -2.07595000e+00   6.04179000e+00]
 [  4.13320000e-01  -1.89561000e+00   6.30754000e+00]
 [  4.30540000e-01  -1.53701000e+00   6.06509000e+00]
 [  4.50900000e-01  -1.56583000e+00   5.20939000e+00]
 [  4.71470000e-01  -2.20596000e+00   4.30960000e+00]
 [  4.95990000e-01  -3.38828000e+00   3.51667000e+00]
 [  5.20990000e-01  -4.77624000e+00   2.98072000e+00]
 [  5.48660000e-01  -6.39743000e+00   2.59107000e+00]
 [  5.82140000e-01  -8.43319000e+00   2.28845000e+00]
 [  6.16900000e-01  -1.06252400e+01   2.09188000e+00]
 [  6.59560000e-01  -1.34361900e+01   1.95250000e+00]
 [  7.04530000e-01  -1.65579700e+01   1.88784000e+00]
 [  7.56080000e-01  -2.03530800e+01   1.89048000e+00]
 [  8.21170000e-01  -2.54962900e+01   1.98989000e+00]
 [  8.92060000e-01  -3.15665300e+01   2.20993000e+00]
 [  9.84100000e-01  -4.02123200e+01   2.67266000e+00]
 [  1.08769000e+00  -5.10312000e+01   3.45841000e+00]
 [  1.21565000e+00  -6.60916300e+01   4.87942000e+00]
 [  1.39322000e+00  -9.03593400e+01   7.80959000e+00]
 [  1.61035000e+00  -1.25695550e+02   1.30459100e+01]
 [  1.93745000e+00  -1.88957420e+02   2.52787300e+01]]

私の問題は、値が浮動小数点数でなければならないことです(つまり、最初の値は0.18787でなければなりません)。arr配列の数値が指数形式である理由がわかりません。

あなたの助けに本当に感謝します!

4

2 に答える 2

2

これらフロートです。これは、フロートを表示するもう1つの方法です。Numpy配列は、デフォルトで指数形式で浮動小数点数を出力します。データをテキストファイルに保存するために別の形式が必要な場合は、numpy.save.savetxtを使用するか、Python形式の関数を使用して自分で行う必要があります。

ただし、科学的形式と比較して精度が低下することに注意する必要があります。その理由は、科学的形式では、非常に大きな数を表すことができるのと同じ桁数で非常に小さな数を表すことができるためです。10進表現ではそれを行うことはできません。

于 2012-09-25T08:43:15.327 に答える
1

NumPyでフロートの配列を印刷することに興味がある場合は、次のことができます。

  • fmt関数のパラメーターを使用しますnp.savetxt。たとえば、3列のfloatを"%.5f"スペースで区切ってとして印刷する場合は、を使用しますfmt="%.5f %.5f ".5f"
  • NumPy配列が画面に出力される方法を変更したい場合はnp.set_printoptions、たとえばを使用して関数を試すことができますnp.set_printoptions(precision=5)

dtype="|S10"フロートの配列を文字列の配列に変換する最後のトリックがあります。たとえば、次のような文字列dtypeを使用しますwav.astype("|S10")。必要な文字列の適切なサイズを見つけるには、少し手を加える必要があります("|S10"'最大10文字を意味します) 。 、何か大きなものを印刷するかのように、切り捨てられます。実際にはお勧めしませんが、演習としては無害です。

于 2012-09-25T09:00:17.267 に答える