Запись координат xyz в файл csv

Я пытаюсь записать координаты (координаты xyz) двойного круга в файл csv.

Я написал следующий код.

import numpy as np
import matplotlib.pyplot as plt
import csv

bLength=2.10e-10
numPoints=10
totalLength = bLength * numPoints
Circumference = totalLength
radius = Circumference / (2 * np.pi)
totalAngle=360.0
angle = 360.0/numPoints

# define a function frange to include fraction
def frange(start, stop, step):
    i = start
    while i < stop:
        yield i
        i += step
# getting the x, y co-ordinates of the two circles displaced by angle/2)    
for i in frange(0.0, 360.0, angle):
    plt.plot(radius * np.cos(i), radius * np.sin(i), 'bo')
    for j in frange(angle/2, 360.0, angle):
        plt.plot(radius * np.cos(j), radius * np.sin(j), 'bo')

plt.show() 

Здесь я вижу кружок на графике (в Jupyter Notebook). Однако я хотел бы записать координаты (xyz) этих кругов (двойной круг) в «файл csv».

Синтаксис может быть следующим. Однако я не могу двигаться дальше.

with open('data.csv', 'w') as f:
    csv.writer(f, delimiter=' ').writerows(f)

Окончательный результат должен содержать три столбца. Первые два вида csv будут взяты из вышеупомянутого цикла for. Третий столбец файла csv должен быть некоторой константой (скажем, 0 или 2,1). Как я могу это сделать?

добавить в список, затем np.array(list), затем использовать np.savetxt для записи массива

Joe 01.05.2018 15:26

Вы можете использовать массив numpy для упрощения кода. Если известен радиус: t = np.arange(0, 2*np.pi, granularity)x,y = radius*np.cos(t), radius*np.sin(t)

Adrien Logut 01.05.2018 15:29

Подскажите, почему у вас две петли? Внешний цикл создает круг, а внутренний цикл создает один дополнительный круг для каждого угла внешнего цикла! Тем не менее, вы упомянули, что рисуете «круг». Вы хотите один кружок или несколько?

anishtain4 01.05.2018 15:31

@ anishtain4 Мне нужны координаты кругов буксировки, разделенных на небольшом расстоянии. Второй цикл предназначен для создания второго круга (на небольшом расстоянии от первого круга).

phenomenon 01.05.2018 16:11

@phenomenon Нет, все в одном круге.

Stop harming Monica 01.05.2018 18:43
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
5
796
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Немного почистив математику и питон, это должно сработать:

import numpy as np
import matplotlib.pyplot as plt

bLength=2.10e-10
numPoints=10
radius = bLength*numPoints / (2 * np.pi)
theta = np.linspace(0,2*np.pi,numPoints,endpoint=False)
dtheta=theta[1]-theta[0]
x0,y0=np.cos(theta),np.sin(theta)
x1,y1=np.cos(theta+dtheta/2),np.sin(theta+dtheta/2)
plt.plot(x0,y0)
plt.plot(x1,y1)
cons=np.ones(x0.shape)*10
np.savetxt('circle.csv',np.c_[x0,y0,cons],delimiter=',')

в функции linspace я использовал endpoint=False, чтобы избежать повторения одного и того же значения, но на графиках это выглядит как прерывание. Вы можете продублировать его, а при упаковке для записи используйте вместо этого np.c_[x0[:-1],y0[:-1],cons[:-1]].

Спасибо за четкий код. Это дает только половину координат. Модель двойного кольца, для которой мне нужны координаты xyz, доступна здесь, на рисунках (a) и (c): researchgate.net/figure/….

phenomenon 01.05.2018 17:34

@phenomenon: записывает координаты круга «а» и константы, как вы упомянули в своем вопросе. Вы хотите оба круга? просто поменяйте массив в savetxt на out_array=np.r_[np.c_[x0,y0,cons0],np.c_[x1,y1,cons1]. Изменить код в зависимости от того, что вы хотите, должно быть легко.

anishtain4 01.05.2018 18:20

Другие вопросы по теме