我有一个numpy的数组:
x = np.array([[1.5,1.3],[2.5,1.5]])
将其转换为类似这样的字符串列表的最pythonic方法是什么:
y = ['1.5 1.3','2.5 1.5']
我现在做的不是很有效:
y = []
for i in range(x.shape[0]):
txt = ''
for j in range(x.shape[1]):
txt+=' '%.5e'%x[i,j]
y.append(txt)
尝试过:
x = x.astype('|S10').tolist()
y = [' '.join(i) for i in x]
但是如果我在x中有很多小数位,它将在第10个小数位后截断。
这是一种方法,该方法首先将输入的数字数组转换为带.astype('S4')
转换的字符串数组,然后进行一级循环理解以使用来连接每一行中的所有字符串" ".join(item)
,其中item
字符串数组中的每一行都是这样,例如-
[" ".join(item) for item in x.astype('S4')]
如果您正在寻找精确的控制,您可以更改dtype
到S6
,S12
或者S14
。
样品运行-
In [9]: x
Out[9]:
array([[ 0.62047293, 0.02957529, 0.88920602, 0.57581068],
[ 0.40903378, 0.80748886, 0.83018903, 0.22445871],
[ 0.87296866, 0.94234112, 0.70001789, 0.99333763],
[ 0.96689113, 0.35128491, 0.35775966, 0.26734985]])
In [10]: [" ".join(item) for item in x.astype('S4')]
Out[10]:
['0.62 0.02 0.88 0.57',
'0.40 0.80 0.83 0.22',
'0.87 0.94 0.70 0.99',
'0.96 0.35 0.35 0.26']
In [11]: [" ".join(item) for item in x.astype('S14')]
Out[11]:
['0.620472934011 0.029575285327 0.889206021736 0.575810682998',
'0.409033783485 0.807488858152 0.830189034897 0.224458707937',
'0.872968659668 0.942341118836 0.700017893576 0.993337626766',
'0.966891127767 0.351284905075 0.357759658063 0.267349854182']
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句