【问题标题】:adding numpy vector to a numpy multi-dimensional array将 numpy 向量添加到 numpy 多维数组
【发布时间】:2011-12-29 11:28:14
【问题描述】:

我有一个将元素添加到一维数组的循环:

    for i in range(0, 1000):
        fvector[0, i] = function_value

循环结束后,我有一个 1 x 1000 的向量,我想将它存储在一个多维数组 fmatrix 中,即 50 x 1000。我设法使用循环并单独复制每个元素来做到这一点 - 但它很慢。然后我尝试使用 slice 在循环之后一次性复制整个向量,然后准备在下一列复制下一个向量。如何让它进入下一栏?我试过了:

    s=slice([i], None)
    fmatrix[s] = fvector

以及 s 的各种组合,但我收到有关使用序列或无效语法设置数组元素的错误消息。

我知道这应该是直截了当的,但我对 python、numpy 和数组非常陌生 :-(

【问题讨论】:

    标签: arrays numpy slice


    【解决方案1】:

    试试这个。分配矩阵,这里初始化为零效果:

    >>> import numpy as np
    >>> fmatrix = np.zeros((50, 1000))
    

    然后对其进行索引获取fvector

    >>> fvector = fmatrix[0]
    

    然后分配给fvector的元素:

    >>> for i in xrange(1000):
    ...     fvector[i] = i
    

    如果您现在检查fmatrix[0]fmatrix 的第一行,您会发现它已在上一个循环中分配。这是因为 NumPy 行索引创建 fvector 作为fmatrix 第一行的视图。这样可以为您节省一份副本。

    【讨论】:

    • 如何移动到 fmatrix[1],然后一直移动到最后一行,而不会出现“索引越界错误”?
    • @wot:您可以使用for fvector in fmatrix 遍历行;不需要索引。
    【解决方案2】:

    fvector 的形状为 (1,1000)。这是一个二维数组,即使一个轴的长度为 1。 您可以使用fvector[0,:] 将其切成一维数组。这给出了第一行。

    fmatrix 的形状为 (50,1000)。您可以使用fmatrix[i,:] 将其切成一维数组。这给出了ith 行。

    所以要将fvector第一行的值赋给fmatrixith行:

    fmatrix[i,:] = fvector[0,:]
    

    也许fvector 不需要成为二维数组?或许只需将其设为一维数组即可:

    fvector = np.empty(1000)
    for i in range(0, 1000):
        fvector[i] = function_value
    

    然后你就可以做任务了

    fmatrix[i,:] = fvector
    

    【讨论】:

    • 谢谢 - 我意识到我对 1d - 2d 数组的困惑也可能在其他地方引起问题。
    • 我回去将我的二维数组更改为一维数组,这对赋值语法很有帮助。我使用 larsmans 的“视图”功能来填充矩阵。非常感谢两者。
    猜你喜欢
    • 2020-06-24
    • 2017-08-19
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 2016-12-07
    • 2013-06-28
    相关资源
    最近更新 更多