我希望能够快速(最好不用for循环)生成一个Numpy数组,形式如下:
请注意,starts[0]和stops[0]是相同的信息(表示运行发生在哪一行)。目前为止,因为我只知道jterrace建议的路线,我们需要进行一些扭曲操作,以获得类似于零起始/停止位置的位置,然后将零起始/停止位置与值开始/停止位置交错,并将数字0与last_values数组交错。然后,我们遍历每一行,做如下操作:
这句话的意思是否清楚,或者我需要再解释一下?
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建议的路线,我们需要进行一些扭曲操作,以获得类似于零起始/停止位置的位置,然后将零起始/停止位置与值开始/停止位置交错,并将数字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])
这句话的意思是否清楚,或者我需要再解释一下?