如果你有numbers
數組,你想要的strings
一個數組,你可以這樣寫:
strings = ["%.2f" % number for number in numbers]
如果您的號碼是花車,該數組與具有兩位小數的字符串相同的數字。
>>> a = [1,2,3,4,5]
>>> min_a, max_a = min(a), max(a)
>>> a_normalized = [float(x-min_a)/(max_a-min_a) for x in a]
>>> a_normalized
[0.0, 0.25, 0.5, 0.75, 1.0]
>>> a_strings = ["%.2f" % x for x in a_normalized]
>>> a_strings
['0.00', '0.25', '0.50', '0.75', '1.00']
注意,它也可以與numpy
陣列:
>>> a = numpy.array([0.0, 0.25, 0.75, 1.0])
>>> print ["%.2f" % x for x in a]
['0.00', '0.25', '0.50', '0.75', '1.00']
如果你有一個多維陣列類似的方法,可以使用:
new_array = numpy.array(["%.2f" % x for x in old_array.reshape(old_array.size)])
new_array = new_array.reshape(old_array.shape)
實施例:
>>> x = numpy.array([[0,0.1,0.2],[0.3,0.4,0.5],[0.6, 0.7, 0.8]])
>>> y = numpy.array(["%.2f" % w for w in x.reshape(x.size)])
>>> y = y.reshape(x.shape)
>>> print y
[['0.00' '0.10' '0.20']
['0.30' '0.40' '0.50']
['0.60' '0.70' '0.80']]
如果您檢查Matplotlib example for the function you are using,您會注意到它們使用了類似的方法:構建空矩陣並使用插值方法構建的字符串填充它。引用的代碼的相關部分是:
colortuple = ('y', 'b')
colors = np.empty(X.shape, dtype=str)
for y in range(ylen):
for x in range(xlen):
colors[x, y] = colortuple[(x + y) % len(colortuple)]
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=colors,
linewidth=0, antialiased=False)
使用numpy數組的字符串的原因是因爲matplotlib需要一個正確形狀的可迭代字符串,它表示0到1之間的數字以表示灰度(在我想要的時候)。將我需要的數字數組轉換成字符串數組似乎是最簡單的。我沒有預料到這個長度的複雜性。 – VolatileStorm 2011-03-23 10:13:33
在這種情況下也很有用:1.)從文件2中讀取數據。)假設所有條目都是'float',但是有些是'nan'。 3.)如果所有的都讀爲float,那麼在列表中會出現'double64'變量,它們顯示爲'nan',但不會被識別爲'numpy.nan')4.爲了替換這些,我成功地使用了:'if V [-1] .astype('| S3')=='nan':V [-1] = numpy.nan' – Schorsch 2014-03-21 15:25:15
你可以使用np.genfromtxt並自動處理這個(或多或少)。如果你打算將它們用作浮點數,將浮點數轉換爲字符串總是一個壞主意。 – Vincenzooo 2016-05-16 17:10:36