#python #numpy #matrix #tuples
#python #numpy #матрица #кортежи
Вопрос:
У меня есть матрица с именем w, и она выглядит так:
in: print(w)
out: [[0.0053691 0.00328692]]
он имеет тип <класс ‘numpy.matrix’>
in: print(type(w))
out: <class 'numpy.matrix'>
Я хочу, чтобы это был кортеж, но простой w = tuple(w) не выполняет выполненную работу:
in: w=tuple(w)
in: print(w)
out: (matrix([[0.00624969, 0.00413867]]),)
Но я хочу, чтобы вывод был таким:
in: print(w)
out: (0.00624969, 0.00413867)
Что я делаю не так?
Ответ №1:
У вас есть двумерная вещь.
Вы можете создать список, например
>>> w.tolist()
[[0.0053691, 0.00328692]]
что, вероятно, достаточно хорошо. Если вы действительно хотели извлечь тульпу из внутренней части
>>> tuple(w.tolist()[0])
(0.0053691, 0.00328692)
Комментарии:
1. @mdurant, возможно, вы знаете что-то, чего я не знаю, но есть ли какая-либо разница или преимущество в использовании вашего решения вместо моего?
2. Это тоже хорошо и более компактно — возможно, менее понятно. Я подозреваю, что для любого массива, состоящего из более чем одного элемента, итерация будет медленнее.
3. @PabloC,
tolist
это самый быстрый способ «извлечь» массив numpy (илиnp.matrix
) в списки.*w
распаковка похожаlist(w)
на итерацию по первому измерениюw
и обычно медленнее. Плюс для этогоw
первым измерением является размер 1.
Ответ №2:
Вы «сохраняете» матрицу в кортеж, а не преобразуете ее. Вы можете сделать следующее
tuple(*w.A)
#(0.00624969, 0.00413867)
Звездное выражение ( *w.A
) распаковывает внешнее измерение значений массива путем итерации. Подробнее читайте здесь.
Комментарии:
1. Но если
w
isnp.matrix
, в отличие от 1dndarray
, это не сработает.