Как преобразовать одноэлементный массив в скалярное значение в Python?

Предположим, у меня есть 1x1x1x1x... массив и хотите преобразовать его в скаляр?

Как мне это сделать?

squeeze не помогает.

import numpy as np

matrix = np.array([[1]])
s = np.squeeze(matrix)
print type(s)
print s

matrix = [[1]]
print type(s)
print s

s = 1
print type(s)
print s

4 ответов


можно использовать item() функция:

import numpy as np

matrix = np.array([[[[7]]]])
print(matrix.item())

выход

7

вы можете индексировать пустой кортеж после сжатия:

x = np.array([[[1]]])
s = np.squeeze(x)  # or s = x.reshape(())
val = s[()]
print val, type(val)

Numpy имеет функцию явно для этой цели:asscalar

>>> np.asscalar(np.array([24]))
24

использует item() на реализация.

Я думаю asscalar был добавлен более явный о том, что происходит.


можно использовать np.take -

np.take(matrix,0)

образец выполнения -

In [15]: matrix = np.array([[67]])

In [16]: np.take(matrix,0)
Out[16]: 67

In [17]: type(np.take(matrix,0))
Out[17]: numpy.int64