Я понял, что не очень хорошо проверил свой mwe и поэтому задал неправильный вопрос. Основная проблема заключается в том, что массив numpy передается как массив 2d вместо 1d (или даже когда список Python передается как 1d вместо 2d). Итак, если у нас есть
Код: Выделить всё
x = np.array([[1], [2], [3]])
Извините за путаницу.
Оригинал
Я пытаюсь сформировать новый массив numpy из чего-то, что может быть массивом numpy или стандартным списком Python.
например
Код: Выделить всё
import numpy as np
x = [2, 3, 1]
y = np.array([[0, -x[2], x[1]], [x[2], 0, -x[0]], [-x[1], x[0], 0]])
Код: Выделить всё
def skew(vector):
"""
this function returns a numpy array with the skew symmetric cross product matrix for vector.
the skew symmetric cross product matrix is defined such that
np.cross(a, b) = np.dot(skew(a), b)
:param vector: An array like vector to create the skew symmetric cross product matrix for
:return: A numpy array of the skew symmetric cross product vector
"""
return np.array([[0, -vector[2], vector[1]],
[vector[2], 0, -vector[0]],
[-vector[1], vector[0], 0]])
Код: Выделить всё
import numpy as np
x=[2, 3, 1]
y = skew(x)
Код: Выделить всё
import numpy as np
x = np.array([2, 3, 1])
y = skew(x)
Есть ли простой способ сформировать новый массив numpy, как я это сделал, из чего-то, что представляет собой либо список Python, либо массив numpy, и получить в результате просто стандартный массив numpy с числами с плавающей запятой в каждом элементе?
Теперь, очевидно, одно из решений — проверить, является ли ввод пустым массивом или нет:
Код: Выделить всё
def skew(vector):
"""
this function returns a numpy array with the skew symmetric cross product matrix for vector.
the skew symmetric cross product matrix is defined such that
np.cross(a, b) = np.dot(skew(a), b)
:param vector: An array like vector to create the skew symmetric cross product matrix for
:return: A numpy array of the skew symmetric cross product vector
"""
if isinstance(vector, np.ndarray):
return np.array([[0, -vector.item(2), vector.item(1)],
[vector.item(2), 0, -vector.item(0)],
[-vector.item(1), vector.item(0), 0]])
else:
return np.array([[0, -vector[2], vector[1]],
[vector[2], 0, -vector[0]],
[-vector[1], vector[0], 0]])
Другим решением может быть сначала привести все к массиву, а затем просто использовать вызов массива
Код: Выделить всё
def skew(vector):
"""
this function returns a numpy array with the skew symmetric cross product matrix for vector.
the skew symmetric cross product matrix is defined such that
np.cross(a, b) = np.dot(skew(a), b)
:param vector: An array like vector to create the skew symmetric cross product matrix for
:return: A numpy array of the skew symmetric cross product vector
"""
vector = np.array(vector)
return np.array([[0, -vector.item(2), vector.item(1)],
[vector.item(2), 0, -vector.item(0)],
[-vector.item(1), vector.item(0), 0]])
Мой вопрос: есть ли другой способ сделать это помимо того, что я обсуждал, или я застрял в использовании одного из этих методов?
Подробнее здесь: https://stackoverflow.com/questions/369 ... umpy-array