Array formated as arr = [(1,1),(1,1)...(35,1),(35,1)]
может сбивать с толку. Похоже на list
из tuples
. Если это так, вам нужно использовать понимание списка, чтобы создать новый список:
arr1 = [(i,j, fun(i,j)) for i,j in arr]
e.g.
In [359]: arr=[(1,1),(1,2),(35,1),(35,2)]
In [360]: [(i[0],i[1], sum(i)) for i in arr]
Out[360]: [(1, 1, 2), (1, 2, 3), (35, 1, 36), (35, 2, 37)]
Но вы говорите в комментарии, что arr
- это пустой массив.
In [361]: Arr=np.array(arr)
In [362]: Arr
Out[362]:
array([[ 1, 1],
[ 1, 2],
[35, 1],
[35, 2]])
Те же числа, но они отображаются в виде списка списков. Массив, который отображается в виде списка кортежей, является структурированным массивом с другим dtype
.
Является ли функция чем-то, что может принять весь этот массив, или она должна передавать значения 2 на 2?
np.sum
берет весь массив и может вернуть двумерный результат:
In [366]: np.sum(Arr, axis=1, keepdims=True)
Out[366]:
array([[ 2],
[ 3],
[36],
[37]])
который можно легко объединить с Arr
, получив новый массив:
In [370]: np.concatenate([Arr,np.sum(Arr, axis=1, keepdims=True)],axis=1)
Out[370]:
array([[ 1, 1, 2],
[ 1, 2, 3],
[35, 1, 36],
[35, 2, 37]])
С другой стороны, Python
sum
просто принимает числа. Arr
можно использовать в понимании так же, как список:
In [371]: [sum(i) for i in Arr]
Out[371]: [2, 3, 36, 37]
Чтобы соединить это с оригиналом, мне нужно превратить его в двумерный «вертикальный» массив (как показано в Out[366]).
In [376]: np.concatenate([Arr,np.array([sum(i) for i in Arr])[:,None]],axis=1)
Out[376]:
array([[ 1, 1, 2],
[ 1, 2, 3],
[35, 1, 36],
[35, 2, 37]])
append
, vstack
, hstack
— все это вариации concatenate
. Вы также можете создать массив (4,3)
и вставить значения Arr
и новый расчет.
person
hpaulj
schedule
17.07.2015
arr
массивом NumPy? Или список Python? Другими словами, что возвращаетtype(arr)
? - person tsroten   schedule 17.07.2015numpy.concatenate
. - person tsroten   schedule 17.07.2015