Клавиши слова и значения для разделения массивов numpy

У меня есть словарь как

Samples = {5.207403005022627: 0.69973543384229719, 6.8970222167794759: 0.080782939731898179, 7.8338517407140973: 0.10308033284258854, 8.5301143255505334: 0.018640838362318335, 10.418899728838058: 0.14427355015329846, 5.3983946820220501: 0.51319796560976771}

Я хочу разделить keys и values на 2 numpy массивы. Я пробовал np.array(Samples.keys(),dtype=np.float), но я получаю сообщение об ошибке TypeError: float() argument must be a string or a number

Ответ 1

Вы можете использовать np.fromiter для непосредственного создания массивов numpy из ключа словаря и представления значений:

В python 3:

keys = np.fromiter(Samples.keys(), dtype=float)
vals = np.fromiter(Samples.values(), dtype=float)

В python 2:

keys = np.fromiter(Samples.iterkeys(), dtype=float)
vals = np.fromiter(Samples.itervalues(), dtype=float)

Ответ 2

На python 3.4 выполняется следующее:

Samples = {5.207403005022627: 0.69973543384229719, 6.8970222167794759: 0.080782939731898179, 7.8338517407140973: 0.10308033284258854, 8.5301143255505334: 0.018640838362318335, 10.418899728838058: 0.14427355015329846, 5.3983946820220501: 0.51319796560976771}

keys = np.array(list(Samples.keys()))
values = np.array(list(Samples.values()))

Причина np.array(Samples.values()) не дает того, что вы ожидаете в Python 3, это то, что в Python 3 метод values ​​() для dict возвращает итерируемое представление, тогда как в Python 2 он возвращает фактический список ключей.

keys = np.array(list(Samples.keys())) также будет работать и в Python 2.7, и сделает ваш код более неактивным. Но дополнительный вызов list() будет замедлять его незначительно.

Ответ 3

Просто присвойте все значения списку, а затем преобразуйте их в np.array().

import numpy as np

Samples = {5.207403005022627: 0.69973543384229719, 6.8970222167794759: 0.080782939731898179, 7.8338517407140973: 0.10308033284258854, 8.5301143255505334: 0.018640838362318335, 10.418899728838058: 0.14427355015329846, 5.3983946820220501: 0.51319796560976771}

keys = np.array(Samples.keys())
vals = np.array(Samples.values())

Или, если вы хотите перебрать его:

import numpy as np

Samples = {5.207403005022627: 0.69973543384229719, 6.8970222167794759: 0.080782939731898179, 7.8338517407140973: 0.10308033284258854, 8.5301143255505334: 0.018640838362318335, 10.418899728838058: 0.14427355015329846, 5.3983946820220501: 0.51319796560976771}

keys = vals = []

for k, v in Samples.items():
    keys.append(k)
    vals.append(v)

keys = np.array(keys)
vals = np.array(vals)

Ответ 4

В Python 3.7:

import numpy as np

Samples = {5.207403005022627: 0.69973543384229719, 6.8970222167794759: 0.080782939731898179, 7.8338517407140973: 0.10308033284258854, 8.5301143255505334: 0.018640838362318335, 10.418899728838058: 0.14427355015329846, 5.3983946820220501: 0.51319796560976771}

keys = np.array(list(Samples.keys()))
vals = np.array(list(Samples.values()))

Примечание. Важно отметить, что в этой версии Python dict.keys() и dict.values() возвращают объекты типа dict_keys и dict_values соответственно.

Ответ 5

keys = np.array(dictionary.keys())
values = np.array(dictionary.values())