Передать словарь numpy массивов в функцию - PullRequest
0 голосов
/ 12 октября 2018

Я не смог найти четкого ответа на этот вопрос:

Я использую прямую функцию сортировки выбора, например, так:

from numpy.random import seed
from numpy.random import randint

# We start with a function that finds the smallest 
#value in our array

def findSmallest(arr):
    smallest = arr[0] # stores the smallest value
    smallestIndex = 0 # stores the index of the 
                      # smallest value
    for i in range(1, len(arr)):
        if arr[i] < smallest:
            smallest = arr[i]
            smallestIndex = i
    return smallestIndex

# Our findSmallest function can be used in the 
  #selection sort algorithm

def selectionSort(arr):
    newArr = []
    for i in range(len(arr)):
        smallest = findSmallest(arr) 
        newArr.append(arr.pop(smallest)) 
    return smallestIndex

Затем, вместо того, чтобы делать каждыймассив, мне нужно по одному, я запускаю цикл для возврата словаря, содержащего все массивы:

arraySizes = (5000, 10000, 15000, 20000, 25000)

myArray = dict()

for size in arraySizes:
    myArray[size] = randint(99999, size = size)

Это работает:

print(myArray[10000])

На основе разговорав комментариях я исправляю свой вопрос, но оставлю исходный вопрос под пунктирной линией немного дальше

Хорошо.Так что я был совершенно не в своей тарелке, когда думал, что ** работал при передаче массива в функцию.

Что я до сих пор не могу понять, это как запустить цикл, который передает значения из каждого ключав функцию и возвращает объекты, которые работают с функцией selectionSort выше.

Итак, я хочу передать {5000: 10,2, ... n, 10000: 10000,200 ... n и т. д.}

на selectionSort и в конечном итоге получим что-то по строкам объектов, которые sort5000 = [2,10, ... n] sort10000 = [200, ... n, 10000]

Это не совсем верно, но, надеюсь, достигнет моей цели.Если нет, пожалуйста, дайте мне знать.


Но, когда я пытаюсь передать его в вышеупомянутый выбор сортировки:

selectionSort(**myArray[5000])

Я получаю ошибку:

------------------------------------------------------------
TypeError                  Traceback (most recent call last)  
<ipython-input-21-bc709916eed6> in <module>()
----> 1 selectionSort(**myArray[5000])

TypeError: selectionSort() argument after ** must be a mapping, not 
numpy.ndarray

Я не уверен, как поступить.Должен ли я переписать selectionSort, чтобы он возвращал число массивов?Есть ли способ передать значения из dict по одному?Неужели я все делаю неправильно и должен просто создать несколько массивов и передавать их по одному?

Спасибо за любую помощь.

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