我希望快速(希望沒有for循環)產生以下形式的numpy的數組:在Python/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]
請注意,開始[0]和停止[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])
這是否有意義,還是我應該多解釋一下?
什麼是輸入的形式?形式的元組(開始,停止,值)? – jterrace