【问题标题】:Python: Appending dimensions to a bidimensional arrayPython:将维度附加到二维数组
【发布时间】:2011-02-01 21:04:04
【问题描述】:

假设你有一个数组 (m, m) 并且想要使它成为 (n, n)。例如,将 2x2 矩阵转换为 6x6。所以:

[[ 1.  2.]
 [ 3.  4.]]

收件人:

[[ 1.  2.  0.  0.  0.  0.]
 [ 3.  4.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]]

这就是我正在做的:

def array_append(old_array, new_shape):
    old_shape = old_array.shape
    dif = np.array(new_shape) - np.array(old_array.shape)
    rows = []
    for i in xrange(dif[0]):
        rows.append(np.zeros((old_array.shape[0])).tolist())
    new_array = np.append(old_array, rows, axis=0)
    columns = []
    for i in xrange(len(new_array)):
        columns.append(np.zeros(dif[1]).tolist())
    return np.append(new_array, columns, axis=1)

使用示例:

test1 = np.ones((2,2))
test2 = np.zeros((6,6))
print array_append(test1, test2.shape)

输出:

[[ 1.  1.  0.  0.  0.  0.]
 [ 1.  1.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]]

基于this 的回答。但对于(恕我直言)简单的操作来说,这是很多代码。有没有更简洁/pythonic的方式来做到这一点?

【问题讨论】:

  • @pnodnda:你的方法太复杂了。只需分配新数组并将旧数组复制到适当的位置。正如Benjamins(修改)和我的回答所展示的那样简单。顺便说一句,追加这个词通常与动态数据结构相关联,numpy.array 不是。谢谢

标签: python arrays numpy


【解决方案1】:

为什么不用array = numpy.zeros((6,6)),看numpy docs...

编辑,哎呀,问题已被编辑...我猜你想把一个放在一个充满零的数组的一部分中?那么:

array = numpy.zeros((6,6))
array[0:2,0:2] = 1

如果小矩阵不全是1:

array[ystart:yend,xstart:xend] = smallermatrix

【讨论】:

  • 我只在我编写的代码中添加了输入/输出。您应该在回复之前阅读代码。而且我不是想把一个放在一个充满零的数组中。我正在采用一个小的“矩阵”并通过用零填充/填充它来增加它的维度。
  • 在这种情况下,使用 numpy.zeros 创建一个正确大小的空白矩阵,并插入您的较小矩阵,如上所示。
  • @pnodbnda 您也许应该接受@Benjamin 回答的可能性,不是为了惹恼您或懒惰,而是因为您的问题不够清晰。标题是唯一清楚的事情,显然它甚至不能很好地反映问题的内容。 StackOverflow 是一个建立在礼貌和专业精神上的社区,请在以后评论人们的努力时尝试实践这一点。
  • @Benjamin 您的代码假定整个矩阵具有相同的值。它没有。
  • @Banang 是的,我很抱歉。但是,在没有阅读的情况下急于回答一个问题,然后试图假装你实际上已经回答了任何问题,而实际上你还没有回答,这也不完全是正确的态度。我会看看我是否可以编辑 OP 以使其更清晰。
【解决方案2】:

那就是:

# test1= np.ones((2, 2))
test1= np.random.randn((2, 2))
test2= np.zeros((6, 6))
test2[0: 2, 0: 2]= test1

【讨论】:

    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    相关资源
    最近更新 更多