加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 关于Numpy Broadcasting Answer的解释

发布时间:2020-12-20 11:52:22 所属栏目:Python 来源:网络整理
导读:我最近发布了一个问题 here,答案完全按照我的要求回答.但是,我认为我高估了我进一步操纵答案的能力.我阅读了广播文档,并按照一些链接引导我回到2002年关于numpy广播. 我使用了broadcasting的第二种数组创建方法: N = 10out = np.zeros((N**3,4),dtype=int)o
我最近发布了一个问题 here,答案完全按照我的要求回答.但是,我认为我高估了我进一步操纵答案的能力.我阅读了广播文档,并按照一些链接引导我回到2002年关于numpy广播.

我使用了broadcasting的第二种数组创建方法:

N = 10
out = np.zeros((N**3,4),dtype=int)
out[:,:3] = (np.arange(N**3)[:,None]/[N**2,N,1])%N

哪个输出:

[[0,0]
 [0,1,0]
 ...
 [0,0]
 ...
 [9,9,8,0]
 [9,0]]

但我不明白通过文档如何操纵它.理想情况下,我希望能够设置每个列更改的增量.

恩. A列变为0.5至2,B列变为0.2至1,C列变为1至10.

[[0,0.2,0.8,0]
 [0.5,0]
 ...
 [1.5,0]]

谢谢你的帮助.

解决方法

您可以稍微调整当前代码以使其正常工作.

>>> out = np.zeros((4*5*10,4))
>>> out[:,:3] = (np.arange(4*5*10)[:,None]//(5*10,10,1)*(0.5,1)%(2,10))
>>> out
array([[ 0.,0.,0. ],[ 0.,1.,2.,...
       [ 0.,8.,9.,[ 0.5,...
       [ 1.5,0. ]])

变化是:

>数组上没有int dtype,因为我们需要它来保存某些列中的浮点数.如果需要,可以指定一个浮点数dtype(或者甚至更复杂的东西,只允许在前两列中使用浮点数).>而不是N ** 3个总值,计算每列的不同值的数量,并将它们相乘以得到我们的总大小.这用于零和范围.>在第一个广播操作中使用floor division //运算符,因为此时我们需要整数,但稍后我们会想要浮点数.>除以的值再次基于后面列的值的数量(例如,对于A,B,C值的值,除以B * C,C,1).>添加新的广播操作以乘以各种比例因子(每个值一次增加多少).>更改广播mod%操作中的值以匹配每列的边界.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读