【问题标题】:How to construct a numpy array of numbers of powers of 2 more elegantly?如何更优雅地构造一个 2 的幂数的 numpy 数组?
【发布时间】:2019-05-09 15:49:25
【问题描述】:

我想弄清楚如何在不将每个值都放在手上的情况下创建这个数组。

有没有办法我可以使用每个值都是其前身的两倍值的信息,除了第一个?

我的代码如下:


import numpy as np

Matrix = np.array([1,2,4,8,16,32,64,128,256]).reshape (3,3)

print(Matrix)

【问题讨论】:

  • 也许不是更优雅,但在这种情况下可以使用位移:np.left_shift(1,np.arange(9)).reshape(3,3)

标签: python numpy jupyter-notebook numpy-ndarray


【解决方案1】:

您可以使用np.arange,并利用它们是2 的权力这一事实:

2**np.arange(9).reshape(-1, 3)

array([[  1,   2,   4],
       [  8,  16,  32],
       [ 64, 128, 256]], dtype=int32)

【讨论】:

【解决方案2】:

你也可以这样做:

var myRandomArray = [1];
var i = 1;
var num = 1;
while (i < 9) {
  myRandomArray.push(num = num * 2);
  i = i + 1;
}

这是用 JavaScript 编写的。对于 Python,只需切换您需要的内容,主要思想仍然存在。我相信 Python,它是 append 而不是 push。

【讨论】:

  • OP 正在寻找 python 解决方案,与问题的标签一样清楚
  • 给了他一个javascript解决方案,主要思想是问题的解决方案,因为python程序员会知道语法是什么
【解决方案3】:

你可以使用np.vander:

np.vander([2], 9, True).reshape(3, 3)
# array([[  1,   2,   4],
#        [  8,  16,  32],
#        [ 64, 128, 256]])

【讨论】:

    【解决方案4】:

    这是一个陪审团操纵的解决方案:

    In [10]: total_num = 9 
    
    In [11]: np.array([2**n for n in range(0, total_num)]).reshape(3, -1) 
    Out[11]: 
    array([[  1,   2,   4],
           [  8,  16,  32],
           [ 64, 128, 256]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 2010-10-08
      • 2019-06-27
      相关资源
      最近更新 更多