3

numpy 配列があるとします。

1 10
2 20
3 0
4 30

そして、各行がその行の最初の 2 つの列の合計 (または任意の計算) である 3 番目の列を追加します。

1 10 11
2 20 22
3 0  3
4 30 34

それ、どうやったら出来るの?

4

3 に答える 3

5

この種の計算には、組み込みのmap 関数が非常に便利です。計算結果を 3 番目の列に追加するだけです。合計の場合:

>>> import numpy as np
>>> my_arr = np.array([[1, 10], [2, 20], [3, 0], [4, 30]])
>>> np.vstack( (my_arr.T, map(sum, my_arr) )).T
array([[ 1, 10, 11],
       [ 2, 20, 22],
       [ 3,  0,  3],
       [ 4, 30, 34]])

また、他の機能でも動作します。

>>> my_func = lambda x: 2*x[0] + x[1]
>>> np.vstack( (my_arr.T, map(my_func, my_arr) )).T
array([[ 1, 10, 12],
       [ 2, 20, 24],
       [ 3,  0,  6],
       [ 4, 30, 38]])
于 2012-05-01T07:49:05.747 に答える
3

以下を試してください

軸 1 に沿った np.sum は、要素を行ごとに追加することに注意してください。次に、結果を列行列として再形成し、最後に元の配列に追加できます

>>> new_col = np.sum(x,1).reshape((x.shape[0],1))
>>> np.append(x,new_col,1)
array([[ 1, 10, 11],
       [ 2, 20, 22],
       [ 3, 30, 33],
       [ 4, 40, 44]])

または1行で

np.append(x,np.sum(x,1).reshape((x.shape[0],1)),1)
于 2012-05-01T07:22:50.127 に答える
3
import numpy

my_arr = numpy.array([[1, 10],
                      [2, 20],
                      [3, 0],
                      [4, 30]])
column0 = my_arr[:,0:1]  # Use 0:1 as a dummy slice to maintain a 2d array
column1 = my_arr[:,1:2]  # Use 1:2 as a dummy slice to maintain a 2d array
new_column = column0 + column1
my_arr = numpy.hstack((my_arr, new_column))
于 2012-05-01T07:19:56.493 に答える