将数组按行和列拆分

3

使用Python 2.

我需要将一个数组按行和列拆分,但是我似乎无法得到练习中要求的解决方案。

import numpy as np
a = np.array([[5, 0, 3, 3],
 [7, 9, 3, 5],
 [2, 4, 7, 6],
 [8, 8, 1, 6]])

到目前为止,我有这些功能

def _rows(a):
    print("array:"+ str(a[:,]))
_rows(a)
def _col(a):
    alt=a.T
    print ("array:"+ str(alt[:,]))
_col(a)

但是我需要返回一个列表,当我使用list()函数时,它会将每个单独的字符分开。

我需要的结果是:

[array([5, 0, 3, 3]), array([7, 9, 3, 5]), array([2, 4, 7, 6]), array([8, 8, 1, 6])]

[array([5, 7, 2, 8]), array([0, 9, 4, 8]), array([3, 3, 7, 1]), array([3, 5, 6, 6])]
2个回答

8

您可以使用以下代码将行和列解压缩成列表:

res1, res2 = [*a], [*a.T]

print(res1)

[array([5, 0, 3, 3]),
 array([7, 9, 3, 5]),
 array([2, 4, 7, 6]),
 array([8, 8, 1, 6])]

print(res2)

[array([5, 7, 2, 8]),
 array([0, 9, 4, 8]),
 array([3, 3, 7, 1]),
 array([3, 5, 6, 6])]

扩展可迭代解包是在Python 3.0中引入的,对于旧版本,您可以像@U9-Forward的答案中那样调用列表构造函数。


谢谢,我需要导入一些东西才能使用 * 吗?因为它给了我一个语法错误。 - Gonzalo de Quesada
我猜你正在使用Python 2。这是在Python 3中引入的。让我为旧版本添加一些替代方案@GonzalodeQuesada - yatu
谢谢,我也有Python 3,但我正在尝试解决与NumPy导入相关的错误,所以现在我正在使用Python 2。 - Gonzalo de Quesada
只需使用 list(a) 即可。[*a] 在 Python 3.4.4 中不起作用(也不适用于 Python 2)。在旧版的 Python3 中,错误是“SyntaxError:can use starred expression only as assignment target”。 - nicola
“doesn't work for python 3.4.4” 确实可以。它是在 Python 3.0 中引入的。@nicola - yatu
@yatu 我在我的安装上尝试了一下,但是出现了我引用的错误,你有没有自己检查一下还是只依赖于文档?这可能是一个错误或者与我的安装有关的特殊情况,但我收到了一个错误。 - nicola

2
作为看起来正在使用Python 2的用户:
最初的回答。
>>> l1, l2 = list(a), list(a.T)
>>> l1
[array([5, 0, 3, 3]), array([7, 9, 3, 5]), array([2, 4, 7, 6]), array([8, 8, 1, 6])]
>>> l2
[array([5, 7, 2, 8]), array([0, 9, 4, 8]), array([3, 3, 7, 1]), array([3, 5, 6, 6])]
>>> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接