如果你有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