Python 使用占位符将数组调整为不可能的形状

Python 使用占位符将数组调整为不可能的形状,python,python-3.x,numpy,Python,Python 3.x,Numpy,我有一个数组,我正在重新组织该数组,以解决一个前端问题,其中对象按此顺序显示 '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

我有一个数组,我正在重新组织该数组,以解决一个前端问题,其中对象按此顺序显示

'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中有内置功能来处理这些类型的场景?另外,在我的实际代码中,数组中填充的是对象而不是单个字母,因此我不确定占位符的最佳做法是什么。

在重新成形之前,将结果大小填充到最接近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')
>结果=['a']
>>>l=len(结果)
>>>n=int(l/3)+1如果l%3其他int(l/3)
>>>np.pad(np.array(results),((0,n*3-l)),mode='constant')。重塑((n,3),order='F'))

数组([['a','','',]],dtype='基于对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)

Numpy不能很好地处理锯齿状数组,您应该首先研究填充
Numpy。pad
可能是您想要的。文档。请添加一个可以工作的最小示例,我们可以将其复制到控制台。这意味着所有输入数据都应该使用可执行代码来生成数据样本。@Scotty1-我认为这是一项最小的工作除非你想从我在前端使用的软件包中导入numpy或文档以显示真实的数据,否则请不要使用示例。很抱歉,判断太快。我的错。这是有效的,但它仍然会留下占位符,在我的情况下,占位符是一个问题。有什么想法吗?