如何在广播中使用 numpy randint 函数?

How to use numpy randint function with broadcasting?

我最近从这个 link numpy randint manual 中了解到以下对 numpy 的使用。此页面中的最后一个示例显示了此命令,但没有任何解释。

import numpy
x=numpy.random.randint([1, 3, 5, 7], [[10], [20]], dtype=np.uint8)

你能解释一下输入参数是什么意思吗?

In [25]: x=np.random.randint([1, 3, 5, 7], [[10], [20]], dtype=np.uint8)
In [26]: x.shape
Out[26]: (2, 4)

2个输入是(4,)和(2,1)形数组:

In [27]: np.array([1, 3, 5, 7]), np.array([[10], [20]])
Out[27]: 
(array([1, 3, 5, 7]),
 array([[10],
        [20]]))

根据broadcasting规则

(4,) with (2,1) => (1,4) with (2,1) => (2,4)
  • 根据需要添加前导尺寸 1 尺寸
  • 标量所有大小为 1 的维度以匹配

在这种情况下

In [28]: x
Out[28]: 
array([[ 6,  9,  7,  9],
       [19, 17, 10,  9]], dtype=uint8)

按列,值都大于等于[1,3,5,7],对吧?

按行,上限是 [10, 20],对吗?

几个示例数组:

In [29]: x=np.random.randint([1, 3, 5, 7], [[10], [20]], dtype=np.uint8)
In [30]: x
Out[30]: 
array([[ 7,  8,  5,  9],
       [ 5, 17,  6,  9]], dtype=uint8)
In [31]: x=np.random.randint([1, 3, 5, 7], [[10], [20]], dtype=np.uint8)
In [32]: x
Out[32]: 
array([[ 6,  9,  7,  9],
       [ 9, 11, 18, 10]], dtype=uint8)

[1, 3, 5, 7][[10], [20]]两个数组广播到一个共同的形状时,第一个就变成了

[[1, 3, 5, 7]
 [1, 3, 5, 7]]

第二个给出

[[10, 10, 10, 10]]
 [20, 20, 20, 20]]

np.random.randint() 生成一个随机生成的整数数组,其形状与这些数组相同,其中每个条目都由两个数组的相应条目绑定。例如,位置(0, 0)的条目至少为1且小于10,位置(0, 1)的条目至少为3且小于10等