#python #arrays #list #numpy
Вопрос:
У меня есть список массивов numpy, и я хочу изменить некоторые числа массивов. Это мой упрощенный список:
first_list=[np.array([[1.,2.,0.], [2.,1.,0.], [6.,8.,3.], [8.,9.,7.]]),
np.array([[1.,0.,2.], [0.,0.,2.], [5.,5.,1.], [0.,6.,2.]])]
У меня есть коэффициент, который определяет, сколько разбиений у меня в каждом массиве:
spl_array=2.
это означает, что каждый массив списка может быть разделен на 2. Я хочу добавить фиксированное значение ( 3.
) в последний столбец каждого разделения каждого массива, а также скопировать последнее разделение и вычесть это значение ( 3.
) из третьего столбца этого скопированного разделения. Наконец, я хочу, чтобы это выглядело следующим образом:
final_list=[np.array([[1.,2.,3.], [2.,1.,3.], [6.,8.,6.], [8.,9.,10.],
[6.,8.,0.], [8.,9.,4.]]), # copied and subtracted
np.array([[1.,0.,5.], [0.,0.,5.], [5.,5.,4.], [0.,6.,5.],
[5.,5.,-2.], [0.,6.,-1.]])] # copied and subtracted
Я попробовал несколько петель, но полностью проиграл. Заранее благодарю за любую помощь.
final_list=[]
for i in first_list:
each_lay=np.split (i, spl_array)
for j in range (len(each_lay)):
final_list.append([each_lay[j][:,0], each_lay[j][:,1], each_lay[j][:,2] 3])
Комментарии:
1. Я не понимаю, как вы получаете 0, 0, -2, -1. Не могли бы вы объяснить мне, пожалуйста? Я думал 0, 4, -2, -1
2. Дорогой @Corralien, отчасти это была моя вина. Сначала
0
следует4.
объяснить это. Значение последнего столбца последнего разбиения первого массива равно3.
и7.
, я скопировал это разбиение и вычитал последний столбец на3.
, так что последним столбцом скопированного разбиения будет0
и4.
. Для второго массива последним столбцом последнего разбиения является1.
и2.
, поэтому, если я вычту3.
из них, это будет-2.
и-1.
.3. все ли массивы в списке одинаковы?
4. Уважаемый @yan ziselman, да, все массивы имеют одинаковую длину. Я действительно ценю вашу помощь.
5. есть ли причина, по которой вы не складываете весь массив в один массив?
Ответ №1:
Это то, чего ты ожидаешь:
m = np.asarray(first_list)
m = np.concatenate((m, m[:, 2:]), axis=1)
m[:, :4, 2] = 3
m[:, 4:, 2] -= 3
final_list = m.tolist()
>>> m
array([[[ 1., 2., 3.],
[ 2., 1., 3.],
[ 6., 8., 6.],
[ 8., 9., 10.],
[ 6., 8., 0.],
[ 8., 9., 4.]],
[[ 1., 0., 5.],
[ 0., 0., 5.],
[ 5., 5., 4.],
[ 0., 6., 5.],
[ 5., 5., -2.],
[ 0., 6., -1.]]])