分隔数组中的每一项
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 你是绝对正确的。添加说明。以上是关于分隔数组中的每一项的主要内容,如果未能解决你的问题,请参考以下文章