【问题标题】:Numpy set all indexes to a value [duplicate]Numpy将所有索引设置为一个值[重复]
【发布时间】:2019-08-25 17:18:35
【问题描述】:

我有一个 numpy ndarray a = np.ndarray((3,3)),我希望所有索引都以相同的值开始,例如5:

array([[5., 5., 5.],
       [5., 5., 5.],
       [5., 5., 5.]])

注意:我发布这种问答风格是因为每次查找时我总是会发现一堆关于复杂切片的随机问题,但不是一次投射所有内容的简单示例。希望下次我搜索这个问题时,这会作为更直接的结果弹出。 但我也希望其他人有好的想法我可以采纳。

【问题讨论】:

  • 我感觉蠢事正在发生。您在一秒钟内发布并回答了您的问题...
  • 它正在使用stackoverlow Q&A。我在问题末尾的笔记中提到了它。
  • 哦,我明白了!我不知道这是一个功能...我以为您喜欢编写一种发布问题然后立即回答的方式。这是一个很好的功能:D

标签: python numpy numpy-ndarray


【解决方案1】:

这里有一些可靠的方法:

# Use the function built for this very purpose
>>> a = np.full((3, 3), 5)
>>> a
array([[5., 5., 5.],
       [5., 5., 5.],
       [5., 5., 5.]])

# [:] is shorthand for every index.
>>> a = np.ndarray((3,3))
>>> a[:] = 5
>>> a
array([[5., 5., 5.],
       [5., 5., 5.],
       [5., 5., 5.]])

# multiply a single value over every index (currently all 1s)
>>> a = np.ones((3,3)) * 5   
>>> a
array([[5., 5., 5.],
       [5., 5., 5.],
       [5., 5., 5.]])

查看documentation关于索引的更多详细信息和复杂索引/切片的示例

【讨论】:

    【解决方案2】:

    有几种方法可以实现这一点,但我认为重点是分析哪种方法可以为您提供最佳结果:

    In[1]: %timeit np.ones((3,3)) * 5
    6.82 µs ± 374 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)    
    In[2]: %%timeit
           np.ndarray((3,3))
           a[:] = 5
    1.96 µs ± 29.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    
    In[3]: %timeit np.full((3, 3), 5)
    4.13 µs ± 59.3 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
    

    因此,可能最好的方法是创建数组并将值 5 分配给所有元素,这意味着使用第二个选项。

    【讨论】:

      【解决方案3】:

      我似乎有另一种方法,只需使用加号运算符:

      >>> import numpy as np
      >>> a = np.zeros((3,3))
      >>> a
      array([[ 0.,  0.,  0.],
             [ 0.,  0.,  0.],
             [ 0.,  0.,  0.]])
      >>> a + 5
      array([[ 5.,  5.,  5.],
             [ 5.,  5.,  5.],
             [ 5.,  5.,  5.]])
      >>> 
      

      (PS 使用zeros 而不是ndarray

      【讨论】:

      • 很好,所以它与 np.ones() * 5 的想法相同
      • @loganjones16 类似,只是加号运算符
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      • 2019-09-16
      相关资源
      最近更新 更多