在python中for循环的每次迭代之后为数据创建新列

2024-04-26 06:45:08 发布

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

使用下一个代码,我想将结果放入m的不同值的列中

import numpy as np 
for m in np.arange(0, 4, 1):
   for n in np.arange(1, 4, 1):
       coef = 2*m/n
       print coef

其结果是:

^{pr2}$

我想要这个

0 0 0
2 1 0
4 2 1
6 3 2

列的值的和,直接得到

0 + 0 + 0 = 0
2 + 1 + 0 = 3
4 + 2 + 1 = 7
6 + 3 + 2 = 11

Tags: 代码inimportnumpyforasnpprint
3条回答

在打印后添加逗号,这样我们就不会在内部循环之外添加新行和另一个打印来分隔每一行:

import numpy as np
for m in np.arange(0, 4, 1):
   for n in np.arange(1, 4, 1):
       coef = 2*m/n
       print coef,
   print 

这会给你:

^{pr2}$

或使用打印功能:

from __future__ import print_function


import numpy as np

for m in np.arange(0, 4, 1):
    print(*(2 * m / n for n in np.arange(1, 4, 1)))

{1>我们可以使用内循环来得到

import numpy as np

for m in np.arange(0, 4, 1):
    print(sum(2 * m / n for n in np.arange(1, 4, 1)))

这会给你:

0
3
7
11

为了完整起见,与第一个示例等效的print_函数代码是设置end=" "

from __future__ import print_function

import numpy as np
for m in np.arange(0, 4, 1):
   for n in np.arange(1, 4, 1):
       coef = 2*m/n
       print(coef, end=" ")
   print()

正如我所理解的那样,您需要创建一个新的数组,其中的列与您指定的一样。在

import numpy as np 
a = np.zeros([3,4])
for m in np.arange(0, 4, 1):
    col = []
    for n in np.arange(1, 4, 1):
        coef = int(2*m/n)
        col.append(coef)
    a[:, int(m)] = col

print(a.T)

使用循环所做的与range一样有效。不需要使用numpy。在

但如果这是一个学习的练习,我会建议另一种方法。在

直接从射程做一个数组。//是整数除法。在

In [99]: A=2*np.arange(4)[:,None]//np.arange(1,4)

In [100]: A
Out[100]: 
array([[0, 0, 0],
       [2, 1, 0],
       [4, 2, 1],
       [6, 3, 2]], dtype=int32)

可以使用数组方法跨列求和:

^{pr2}$

要获得一个好的格式(不带括号等),请创建一个行格式字符串:

In [102]: fmt = '%d + %d + %d = %d'               

In [103]: for row in A:                           
    print(fmt%(tuple(row)+(row.sum(),))) 
   .....:     
0 + 0 + 0 = 0
2 + 1 + 0 = 3
4 + 2 + 1 = 7
6 + 3 + 2 = 11

(Python3的print函数形式正常,2.7中有)

我本可以使用一个变体通过np.savetxt将其写入文件。在

In [104]: A.sum(axis=1,keepdims=True)  # sum in column array shape
Out[104]: 
array([[ 0],
       [ 3],
       [ 7],
       [11]], dtype=int32)

In [105]: A1 = np.concatenate((A, A.sum(axis=1,keepdims=True)),axis=1)

In [106]: A1     # the values and sum in one array
Out[106]: 
array([[ 0,  0,  0,  0],
       [ 2,  1,  0,  3],
       [ 4,  2,  1,  7],
       [ 6,  3,  2, 11]], dtype=int32)

In [107]: np.savetxt('test.txt',A1,fmt=fmt)

In [108]: cat test.txt    # look at the resulting file
0 + 0 + 0 = 0
2 + 1 + 0 = 3
4 + 2 + 1 = 7
6 + 3 + 2 = 11

没有numpy的Python2.7版本:

>>> for m in range(4):
...     row = [2*m/n for n in range(1,4)]
...     fmt = '%d + %d + %d = %d'
...     print fmt%(tuple(row)+(sum(row),))
... 
0 + 0 + 0 = 0
2 + 1 + 0 = 3
4 + 2 + 1 = 7
6 + 3 + 2 = 11

相关问题 更多 >