您使用循环执行的操作与range 一样有效。无需使用numpy。
但如果这是一个学习 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)
您可以使用数组方法跨列求和:
In [101]: A.sum(axis=1)
Out[101]: array([ 0, 3, 7, 11], dtype=int32)
为了得到一个很好的格式,没有括号等,创建一个行格式化字符串:
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
(print的函数形式在Python3中正常,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