【问题标题】:Seperate each item in an array分隔数组中的每一项
【发布时间】:2021-01-03 12:12:06
【问题描述】:

我有两个数组的列表,这是一个循环的结果,我正在尝试执行以下操作:

从这里:

import numpy as np
data=[np.array(['one','two','three']),np.array(['four','five','six'])]
data

给了

[array(['one', 'two', 'three'], dtype='<U5'),
 array(['four', 'five', 'six'], dtype='<U4')]

到这个预期的结果:

[array([['one'],
        ['two'],
        ['three']], dtype='<U5'),
 array([['four'],
        ['five'],
        ['six']], dtype='<U4')]

我尝试过 np.split 但没有达到预期效果。

【问题讨论】:

  • 你的意思是转置?喜欢[a.T for a in data]
  • 不,这不会将每个单词放在单独的列表中。查看预期结果。
  • 是的,我的错,转置并没有像我认为的一维数组那样,
  • 这能回答你的问题吗? How can I add new dimensions to a Numpy array?
  • 您从一个数组列表开始,每个数组都有一个 (3,) 形状。显然,您希望每个都具有 (3,1) 形状。为什么?这样做有什么好处?只是一个更漂亮的显示,还是需要进一步处理?

标签: python arrays list numpy


【解决方案1】:

我认为您需要 np.expand_dims 来处理 data 列表中的每个元素,如下所示:

import numpy as np
data=[np.array(['one','two','three']),np.array(['four','five','six'])]
data = [np.expand_dims(ele, axis=1) for ele in data]

【讨论】:

    【解决方案2】:

    在 cmets 中,@Tadhg 建议对每个元素进行转置。乍一看,这似乎是正确的。但是,一维向量的转置,例如:

    array(['one', 'two', 'three'])
    

    很简单:

    array(['one',
           'two',
           'three'])
    

    请注意,矢量并没有真正改变,它仍然具有相同的形状(3,)。要获得所需的结果,您需要在转置之前引入另一个维度,例如像这样:array([['one', 'two', 'three']])。具有(1, 3) 形状的数组的转置将具有(3, 1) 的形状,这正是您想要的。剩下的就是将其应用于数据矩阵中的每个条目:

    [np.array([a]).T for a in data]
    

    【讨论】:

      【解决方案3】:

      试试

      [np.array_split(a,len(a)) for a in data]
      

      Numpy 有一个名为 array_split() 的默认函数,用于将列表拆分为您想要的列表数量。

      【讨论】:

      • @PranavHosangadi 你是绝对正确的。添加说明。
      猜你喜欢
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 2019-07-12
      相关资源
      最近更新 更多