#python #numpy
#python #numpy
Вопрос:
Я хочу сгенерировать 3D-синусоидальную кривую на python. Поддерживает ли это lumpy или есть другая библиотека, которую я могу использовать для этого?
Генерация 2D-кривой проста примерно так —
x = numpy.linspace(0, 20, 0.1)
y = numpy.sin(x)
Теперь у меня есть x и y, которые я могу сохранить на диск.
Теперь я хочу сделать что-то подобное, но для 3D-синусоидальной кривой по осям x, y и z. Я надеюсь, что кто-то мог сделать это раньше и помочь мне.
РЕДАКТИРОВАТЬ: я понял, что для моего варианта использования мне нужна 2D-кривая в 3D-пространстве. Таким образом, другие оси могут быть постоянными. Итак, я просто генерирую 2D-кривую и добавляю постоянное значение третьего параметра, чтобы получить значения x, y, z.
Комментарии:
1. Я не знаю об обобщении синусоидальной функции на более чем одномерный ввод — не могли бы вы сослаться на определение такой функции? Если ее нет, то как именно выглядит 3D-синусоидальная кривая? Я предполагаю
x
, что это независимо, как указано выше, иy = sin(x)
. Чтоz
тогда?2. Тбх, я сам не знаю. Я представляю синусоидальную кривую, случайно брошенную в 3D-пространство. Тогда кривая не будет выровнена по какой-либо одной оси, а будет иметь случайную ориентацию. Он будет иметь значения x, y и z в любой заданной точке. Я не знаю, как это представить, и надеюсь, что кто-то знает.
3. Синусоидальная кривая, случайно расположенная в 3D-пространстве, может быть представлена как синус, умноженный на 4d однородное вращение. 3d-приложения используют такие матрицы. Если у вас есть дискретизированный сигнал синуса, умножьте каждую точку на эту матрицу вращения-преобразования.
4. это требует некоторого разъяснения. Приведенный вами пример является одномерным (не двухмерным): y является функцией одной переменной x. Вы хотите, чтобы z было функцией (x, y), или вы хотите, чтобы f_value = f(x,y, z)?
5. Вам нужна кривая в 3D, например: matplotlib.org/gallery/mplot3d /… ?
Ответ №1:
Вы можете попробовать что-то вроде:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
x = np.arange(0, 20, 0.1)
y = np.sin(x)
z = y*np.sin(x)
fig = plt.figure()
ax = plt.axes(projection='3d')
c = x y
ax.scatter(x, y, z, c=c)
или, может быть, вы хотите z = x*np.sin(x)
или даже z = np.sin(y)
Редактировать: возможно, это лучшее решение z = np.sin(np.sqrt(x**2 y**2))
отсюда
Поиграйте и найдите то, что вы хотите. Довольно забавный материал и зависит от того, какой именно результат вы ищете.