我正在重组一个数组,以解决前端对象按此顺序显示的前端问题。
'a' 'd' 'g'
'b' 'e' 'h'
'c' 'f' 'i'
何时显示为
'a' 'b' 'c'
'd' 'e' 'f'
'g' 'h' 'i'
我通过使用以下代码解决了这个问题:
results = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
results = np.array(results).reshape(int(len(results) / 3), 3).T.ravel().tolist()
我现在遇到的问题是,当给我一个长度不能被3整除的数据数组时,例如
['a']
我明白了
ValueError:无法将大小为1的数组重塑为形状(0,3)
最好的方法是用占位符填充它,然后在调整大小后删除那些占位符吗?或者numpy中有内置功能来处理这些类型的Scenerios?同样在我的实际代码中,数组中填充的是对象而不是单个字母,因此我不太确定占位符的最佳做法是什么。
答案 0 :(得分:2)
在重新整形之前如何将结果大小填充到3的最接近倍数 然后,您可以在转换回列表后过滤空值
>>> results = ['a']
>>> l = len(results)
>>> n = int(l/3)+1 if l%3 else int(l/3)
>>> np.pad(np.array(results), ((0,n*3-l)), mode='constant').reshape((n,3), order='F')
array([['a', '', '']], dtype='<U1')
答案 1 :(得分:0)
基于对Sunitha答案的一些修改(我需要它保留一个1d数组并支持对象作为元素),这就是我最终的目的
l = len(results)
if(l>0):
n = int(l/3)+1 if l%3 else int(l/3)
results = np.array(list(filter((0).__ne__,np.pad(np.array(results), ((0,n*3-l)), mode='constant').reshape((n,3), order='F').flatten())),dtype=object)