将numpy数组格式化为对齐的文本列

2024-09-28 03:19:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想设置写入文本文件的numpy数组的每个元素的字符长度

我目前得到的输出是:

99941     1 56765 56767 51785 51793     0     0     0     0

101150      1  59006  59005  51782  51783      0      0      0      0

正如您在上面的例子中看到的,随着数字的增加,列被移动。在

但在理想情况下,输出应如下所示:

^{pr2}$

有没有什么方法可以固定numpy数组中每个元素的字符长度,以便它在考虑元素字符长度后从右向左写入元素,并保持列格式不变?在

这是我正在处理的代码片段。在

def calculate(self, ElementNum1, ElementNum2):
    Angle = Function().Transformation(ElementNum1, ElementNum2)
    ElementInfo = Shell().getElement(ElementNum2)
    Card1 = np.array([0,0,0,0,0,0,0,0,0,0])
    Card1.itemset(0,(ElementInfo[0]))
    Card1.itemset(1,(ElementInfo[1]))
    Card1.itemset(2,(ElementInfo[2]))
    Card1.itemset(3,(ElementInfo[3]))
    Card1.itemset(4,(ElementInfo[4]))
    Card1.itemset(5,(ElementInfo[5]))
    return str(Card1)

def AngleSolution1(self,ElementPair):
    Pair = np.genfromtxt(ElementPair, dtype=int, comments='None', delimiter=', ')
    row = int(Pair.size/2)
    p = mp.Pool(processes=4)
    result = [p.apply_async(AngleCalculateFunction().calculate, args=(Pair[i][0], Pair[i][1])) for i in range(0, int(row/4))]
    Result = open('Angles.csv', "a")
    Result.write('\n'.join(map(str, ((((p.get()).replace('[','')).replace(']','')) for p in result))))
    Result.write('\n')
    Result.close()
    p.close()

由于我错误地使用了多处理,因此存在某些性能问题,但这超出了本文讨论的范围。在


Tags: selfnumpy元素def数组result字符int
2条回答

np.savetxt一次格式化一行,并将其写入打开的文件。在

In [536]: x
Out[536]: 
array([[ 99941,      1,  56765,  56767,  51785,  51793,      0,      0,
             0,      0],
       [101150,      1,  59006,  59005,  51782,  51783,      0,      0,
             0,      0]])

实际上,它正在做(使用打印而不是文件写入插图的目的):

^{pr2}$

或者,如果您想在一个字符串中收集所有行,可以将它们附加到一个列表中:

In [544]: astr = []
In [545]: for row in x:
    astr.append(fmt%tuple(row))
   .....:     
In [546]: print('\n'.join(astr))
   99941        1    56765    56767    51785    51793        0        0        0        0
  101150        1    59006    59005    51782    51783        0        0        0        0

Python对象显示(str(...))通常执行这种行追加和连接。在

你可以这样做:

#!/usr/bin/env python

import numpy as np

test_array=np.array([[99941,1,56765,56767,51785,51793,0,0,0,0],
                 [101150,1,59006,59005,51782,51783,0,0,0,0]])
np.savetxt("test.out",test_array, fmt='%-10s')

这样可以得到如下输出:

^{pr2}$

%-10s部分指定该列的宽度应为10个字符,并用空格填充其余字符。一点警告:这会在每一行的末尾打印出很多额外的空格。在

相关问题 更多 >

    热门问题