Как установить dtype для numpy 2d массива [int, float]? - PullRequest
0 голосов
/ 08 февраля 2019

Может ли кто-нибудь сказать мне, что не так с этим кодом:

import numpy as np

# Create an empty list
mylist = []
# append a variable number of 2d tuples to it, this might be a loop
mylist.append([0, 3.0])
mylist.append([1, 2.5])
print(mylist)
# Convert list to a numpy 2d array
mat = np.array(mylist)
print(mat)
dtype = [('A', 'int'), ('B', 'float')]
# Convert list to a numpy 2d array of [int, float]
mat = np.array(mylist, dtype = dtype)
print(mat)

Когда я преобразую свой список списков в массив Numpy, обе записи становятся float.Я хотел бы сохранить первую запись каждого элемента int и второй float.Вот вывод, который я получаю:

[[0, 3.0], [1, 2.5]]
[[ 0.   3. ]
 [ 1.   2.5]]
Traceback (most recent call last):
  File "dtype_test.py", line 10, in <module>
    mat = np.array(mylist, dtype = dtype)
TypeError: expected a readable buffer object

Заранее спасибо

1 Ответ

0 голосов
/ 08 февраля 2019
In [439]: mylist
Out[439]: [[0, 3.0], [1, 2.5]]
In [440]: mat
Out[440]: 
array([[0. , 3. ],
       [1. , 2.5]])
In [441]: np.array(mylist, dtype)
Out[441]: 
array([[(0, 0. ), (3, 3. )],
       [(1, 1. ), (2, 2.5)]], dtype=[('A', '<i8'), ('B', '<f8')])

Обратите внимание, что числа были продублированы в структурированном массиве.

Если вместо этого мы предоставим список кортежей (обратите внимание, как для отображения структурированного массива используются кортежи):

In [442]: mytup = [tuple(row) for row in mylist]
In [443]: mytup
Out[443]: [(0, 3.0), (1, 2.5)]
In [444]: np.array(mytup, dtype)
Out[444]: array([(0, 3. ), (1, 2.5)], dtype=[('A', '<i8'), ('B', '<f8')])
In [445]: _['A']
Out[445]: array([0, 1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...