Как сделать 2 массива с одинаковой длиной и одинаковым стандартным отклонением между индексом / значением? - PullRequest
2 голосов
/ 01 марта 2020

Требование:

Я бы хотел сделать функцию в python, которая имеет 2 массива, 1 больше второго .
Я хотел бы, чтобы больший размер принимал тот же размер, что и меньший .
НО не только удаляя конец или начало массива, я хотел бы сохранить аналогичное стандартное отклонение выбранного индекса большего массива.

Например:

Для массива размера 10 и массива размера 95 массив размера 95 должен стать размером 10 с, например, выбранным индексом [8, 17, 27, 36 , 46, 55, 65, 74, 84, 93]
в псевдокоде пример ожидаемого результата будет:

len_bigger_array=95 # example where len(bigger_array)=95
len_smaller_array=10 # example where len(smaller_array)=10
result_array=[8, 17, 27, 36, 46, 55, 65, 74, 84, 93] #index of bigger_array with similar distance between each other
len(result_array)=10 #like len_small_array

1st Try:

total = len_bigger_array #len_bigger_array is len(bigger_array)
wanted = len_smaller_array #len_smaller_array is len(smaller_array)
div = 0
mod = 0
result_array = []
divider = int(total/wanted)
rest= total/wanted - divider
for x in range (0, total):
    div=div+1
    if (div >= divider):
        if (mod >= 0.95):
            div=div-1
            mod=0
        else:
            result_array.append(x)
            mod=mod+rest
            div=0
print(result_array, len(result_array))

И результат этой попытки:

  • для len_bigger_array=95 и len_smaller_array=10 работает : result_array=[8, 17, 27, 36, 46, 55, 65, 74, 84, 93] и len(result_array)=10
  • для len_bigger_array=1999 и len_smaller_array=100 работает , также: len(result_array)=100 и содержит индекс large_array с аналогичным расстоянием между каждым
  • для len_bigger_array=182 и len_smaller_array=69 он не работает : result_array содержит индекс bigger_array с одинаковым расстоянием между ними, но len(result_array)!=len_smaller_array
  • для len_bigger_array=95 и len_smaller_array=33 не работает : result_array содержит индекс bigger_array с одинаковым расстоянием между ними, но len(result_array)!=len_smaller_array

2nd Try:

import math
total = len_bigger_array
wanted = len_smaller_array
result_array = []
divider = math.ceil(total/wanted) 
for x in range (0, total):
    if(x % divider == 0):
        result_array.append(x)
missingSlice = wanted - len(result_array)
print(missingSlice)
if (missingSlice>0):
    newWanted=int(total/missingSlice)
    print(newWanted)
    for x in range (0, total):
        if (x % newWanted ==0 and x !=0):
            if x not in l:
                result_array.append(x)
            else:
                result_array.append(x-1)
print(result_array,len(result_array))

И результат этой попытки:

  • для len_bigger_array=95 и len_smaller_array=10 * 107 3 * это работает : result_array=[0, 10, 20, 30, 40, 50, 60, 70, 80, 90] и len(result_array)=10
  • для len_bigger_array=1999 и len_smaller_array=100 это работает также: len(result_array)=100 и содержат индекс больше_array с аналогичным расстояние между каждым
  • для len_bigger_array=182 и len_smaller_array=69 работает : также: len(result_array)=69 и содержит индекс large_array с аналогичным расстоянием между каждым
  • для len_bigger_array=95 и len_smaller_array=33 не работает : result_array содержит индекс bigger_array с одинаковым расстоянием между ними, но len(result_array)=32 вместо 33

Context информация:

меньший_аррай и более крупный_аррай содержат срез изображения CT, поэтому они могут варьироваться.
массив результатов должен содержать индекс большего_аррэйма, эти индексы должны иметь одинаковое стандартное отклонение между собой, чтобы сравнить похожую область между меньшим_арреем и более крупным_арреем (которые имеют одинаковую начальную и конечную точку, но различное количество срезов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...