分隔数组中的每一项

Posted

技术标签:

【中文标题】分隔数组中的每一项【英文标题】: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) 形状。为什么?这样做有什么好处?只是一个更漂亮的显示,还是需要进一步处理? 【参考方案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 你是绝对正确的。添加说明。

以上是关于分隔数组中的每一项的主要内容,如果未能解决你的问题,请参考以下文章

javascript 数组迭代与归并

JavaScript迭代方法,归并方法

js_Array类型_迭代方法

js 将数组中的每一项安装奇偶重新组合成一个数组对象

js数组的五种迭代遍历方式 every filter forEach map some

JavaScript 的数据结构与算法