【问题标题】:how to modify a column of numpy arrays stored in a list如何修改存储在列表中的一列numpy数组
【发布时间】:2021-06-21 08:51:58
【问题描述】:

我有一个 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

我尝试了一些 for 循环,但我完全输了。在此之前,我非常感谢任何帮助。

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])

【问题讨论】:

  • 我不明白你如何获得0、0、-2、-1。你能解释一下吗?我以为是 0、4、-2、-1
  • 亲爱的@Corralien,这部分是我的错。首先0 应该是4. 让我们解释一下。第一个数组的最后一个拆分的最后一列的值是3.7.,我复制了这个拆分并将最后一列减去3.,所以,复制拆分的最后一列将是04.。对于第二个数组,最后一个拆分的最后一列是1.2.,所以如果我从中减去3.,它将是-2.-1.
  • 列表中的所有数组都一样吗?
  • 亲爱的@yan ziselman,是的,所有数组都具有相同的长度。非常感谢您的帮助。
  • 有没有理由不将所有数组堆叠在一个数组中?

标签: python arrays list numpy


【解决方案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.]]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-03
    • 2019-10-26
    • 1970-01-01
    • 2016-09-16
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多