python numpy数组索引_在Python / Numpy中一次分配多个数组索引

我希望快速(希望没有for循环)生成以下形式的Numpy数组:

array([a,a,a,a,0,0,0,0,0,b,b,b,0,0,0, c,c,0,0....])

其中a,b,c和其他值在不同点的不同范围重复.我真的在想这样的事情:

import numpy as np

a = np.zeros(100)

a[0:3,9:11,15:16] = np.array([a,b,c])

这显然是行不通的.有什么建议么?

编辑(jterrace回答了原始问题):

数据以N * M Numpy数组的形式出现.每行大多为零,偶尔散布着非零数字序列.我想用序列的最后一个值替换每个这样的序列的所有元素.我会采取任何快速的方法来做到这一点!使用where和diff几次,我们可以获得每次运行的开始和停止索引.

raw_data = array([.....][....])

starts = array([0,0,0,1,1,1,1...][3, 9, 32, 7, 22, 45, 57,....])

stops = array([0,0,0,1,1,1,1...][5, 12, 50, 10, 30, 51, 65,....])

last_values = raw_data[stops]

length_to_repeat = stops[1]-starts[1]

请注意,starts [0]和stops [0]是相同的信息(运行在哪一行上进行).在这一点上,由于我所知道的唯一途径就是jterrace的建议,因此我们需要经过一些扭曲才能获得相似的零起点/终点位置,然后将零起点/终点与值start / stops交织在一起,并将数字0与last_values数组交织.然后,我们遍历每一行,执行以下操作:

for i in range(N)

values_in_this_row = where(starts[0]==i)[0]

output[i] = numpy.repeat(last_values[values_in_this_row], length_to_repeat[values_in_this_row])

这有意义吗,还是我应该再解释一些?

解决方法:

如果您具有完全指定的值和重复计数,则可以通过以下方式进行操作:

>>> import numpy

>>> values = numpy.array([1,0,2,0,3,0])

>>> counts = numpy.array([4,5,3,3,2,2])

>>> numpy.repeat(values, counts)

array([1, 1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 3, 3, 0, 0])

标签:python,numpy

来源: https://codeday.me/bug/20191102/1990381.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值