【问题标题】:create an array of shape (N,N)创建一个形状数组 (N,N)
【发布时间】:2013-04-09 11:34:07
【问题描述】:

如何创建一个形状为 (120,120) 的 numpy 数组,前 7 个值为 0.924,其余值为 0.53。我需要这个作为 matplotlib 中的矩阵

【问题讨论】:

  • 这个问题与matplotlib没有严格的关系。标签已移除

标签: list numpy


【解决方案1】:

最快的方法大概是创建一个空数组,用一个常数值填充,然后更新几个需要更新的值:

>>> x = np.empty((120, 120))
>>> x.fill(0.53)
>>> x[0,:7] = 0.924
>>> x
array([[ 0.924,  0.924,  0.924, ...,  0.53 ,  0.53 ,  0.53 ],
       [ 0.53 ,  0.53 ,  0.53 , ...,  0.53 ,  0.53 ,  0.53 ],
       [ 0.53 ,  0.53 ,  0.53 , ...,  0.53 ,  0.53 ,  0.53 ],
       ..., 
       [ 0.53 ,  0.53 ,  0.53 , ...,  0.53 ,  0.53 ,  0.53 ],
       [ 0.53 ,  0.53 ,  0.53 , ...,  0.53 ,  0.53 ,  0.53 ],
       [ 0.53 ,  0.53 ,  0.53 , ...,  0.53 ,  0.53 ,  0.53 ]])

【讨论】:

    【解决方案2】:
    --> x = np.array([0.53]*(120*120)).reshape(120,120)
    --> x[0,:7] = 0.924
    

    将第一行的前 7 个值填充为 0.924,交换索引中的 0 和 :7 以得到第一列中的前 7 个为 0.924

    【讨论】:

    • 不要这样做!您正在创建一个 14,400 项长的 Python 列表,然后由 numpy 解析以找出它的长度和 dtype,分配一个数组,然后将列表数据复制到其中。请参阅@EOL 的答案以获得更好的解决方法。
    • 虽然@Jaime 对为什么这种方法相对较慢的说法是正确的,但我必须说它的优势是非常清晰的单线;如果速度不是太大问题,我会使用它。 x = np.ones((120, 120))*0.53 是一个类似且可能更快的单行解决方案。 (这三个中最快的是我的答案,因为它只涉及简单快速的值设置。)
    猜你喜欢
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 2022-01-05
    相关资源
    最近更新 更多