Запись $ \ sqrt (2) $ вместо 1.414 в легенде сюжета

Попытка объяснить это более описательно,

Операция 1:

x = [[0, 0], [0, 0]]
print(type(x)) # <class 'list'>
print(x) # [[0, 0], [0, 0]]

x[0][0] = 1
print(x) # [[1, 0], [0, 0]]

Операция 2:

y = [[0] * 2] * 2
print(type(y)) # <class 'list'>
print(y) # [[0, 0], [0, 0]]

y[0][0] = 1
print(y) # [[1, 0], [1, 0]]

Заметил, почему не изменяется первый элемент первого списка не изменил второй элемент каждого списка? Это потому, что [0] * 2 действительно представляет собой список из двух чисел, и ссылка на 0 не может быть изменена.

Если вы хотите создать копии клонов, попробуйте выполнить операцию 3:

import copy
y = [0] * 2   
print(y)   # [0, 0]

y = [y, copy.deepcopy(y)]  
print(y) # [[0, 0], [0, 0]]

y[0][0] = 1
print(y) # [[1, 0], [0, 0]]

еще один интересный способ создания копий клонов, операция 4:

import copy
y = [0] * 2
print(y) # [0, 0]

y = [copy.deepcopy(y) for num in range(1,5)]
print(y) # [[0, 0], [0, 0], [0, 0], [0, 0]]

y[0][0] = 5
print(y) # [[5, 0], [0, 0], [0, 0], [0, 0]]
3
задан Kosta 24 March 2019 в 04:40
поделиться

2 ответа

Вы можете использовать Unicode, чтобы написать символ квадратного корня в виде строки, а затем добавить любое интересующее вас число. Чтобы написать символ квадратного корня в виде строки, используйте '\u221A'.

Один из способов изменить ваш код - превратить x в словарь. Итак x={'2\u221A2': 2*np.sqrt(2), '2':2, '\u221A3':np.sqrt(3)}. Ваш цикл for станет for k,v in x.items(), где k и v являются короткими для ключа и значения, а первая строка в цикле будет ax.plot(E,T(v,E),label='hkl=%s' % k)

С точки зрения анализа числа и его записи в виде квадратного корня , это немного сложнее и выглядело бы примерно так при рассмотрении кода: https://codereview.stackexchange.com/questions/144041/reduce-square-root-to-simplest-radical-form

0
ответ дан Tyberius 24 March 2019 в 04:40
поделиться

Вы можете довольно легко распечатать символ квадратного корня, используя LaTex в maplotlib, т.е.

s = 2
plt.plot(x, y, label=r'$\sqrt{{{}}} 

Сложная часть, конечно, использует правильные коэффициенты и корни, это проще, если вы используете немного другой подход к генерации x, что-то вроде этого

import matplotlib.pyplot as plt
import numpy as np

E = np.linspace(50000,200000,1000) # eV

a = 3.615*10**(-10) #m
h = 6.582*10**(-16) #eV s
m = 9.109*10**(-31) #kg
J = 6.242*10**(-18) #1eV to J

def T(x,E):
    return np.arcsin(x*np.sqrt(J*((np.pi**2 *h**2)/(a**2 * 4*m *E))))*1000

fig, ax = plt.subplots()
k = [(2, 2), (2, 1), (1, 3)]
x = list()
labels = list()
for i in range(len(k)):
    x.append(k[i][0] * np.sqrt(k[i][1]))
    if k[i][0] == 1 and k[i][1] != 1:
        labels.append(r'hkl=$\sqrt{{{}}} 

Это займет любые значения для построения x и печати квадратно-корневых символов по желанию (хотя я уверен, что есть лучшие способы сделать это)

Latex Square Root

.format(k[i][1])) elif k[i][0] != 1 and k[i][1] == 1: labels.append(r'hkl=${{{}}}

Это займет любые значения для построения x и печати квадратно-корневых символов по желанию (хотя я уверен, что есть лучшие способы сделать это)

Latex Square Root

.format(k[i][0])) elif k[i][0] != 1 and k[i][1] != 1: labels.append(r'hkl=${{{}}}\sqrt{{{}}}

Это займет любые значения для построения x и печати квадратно-корневых символов по желанию (хотя я уверен, что есть лучшие способы сделать это)

Latex Square Root

.format(k[i][0], k[i][1])) else: labels.append('hkl=1') for i in range(len(x)): ax.plot(E,T(x[i],E),label=labels[i]) plt.ylabel('$\Theta$ (mrad)') plt.xlabel('Energy (eV)') plt.legend(bbox_to_anchor=(0.99, 0.98), loc=1, borderaxespad=0.)

Это займет любые значения для построения x и печати квадратно-корневых символов по желанию (хотя я уверен, что есть лучшие способы сделать это)

Latex Square Root

.format(s))

Сложная часть, конечно, использует правильные коэффициенты и корни, это проще, если вы используете немного другой подход к генерации x, что-то вроде этого

import matplotlib.pyplot as plt
import numpy as np

E = np.linspace(50000,200000,1000) # eV

a = 3.615*10**(-10) #m
h = 6.582*10**(-16) #eV s
m = 9.109*10**(-31) #kg
J = 6.242*10**(-18) #1eV to J

def T(x,E):
    return np.arcsin(x*np.sqrt(J*((np.pi**2 *h**2)/(a**2 * 4*m *E))))*1000

fig, ax = plt.subplots()
k = [(2, 2), (2, 1), (1, 3)]
x = list()
labels = list()
for i in range(len(k)):
    x.append(k[i][0] * np.sqrt(k[i][1]))
    if k[i][0] == 1 and k[i][1] != 1:
        labels.append(r'hkl=$\sqrt{{{}}} 

Это займет любые значения для построения x и печати квадратно-корневых символов по желанию (хотя я уверен, что есть лучшие способы сделать это)

Latex Square Root

.format(k[i][1])) elif k[i][0] != 1 and k[i][1] == 1: labels.append(r'hkl=${{{}}}

Это займет любые значения для построения x и печати квадратно-корневых символов по желанию (хотя я уверен, что есть лучшие способы сделать это)

Latex Square Root

.format(k[i][0])) elif k[i][0] != 1 and k[i][1] != 1: labels.append(r'hkl=${{{}}}\sqrt{{{}}}

Это займет любые значения для построения x и печати квадратно-корневых символов по желанию (хотя я уверен, что есть лучшие способы сделать это)

Latex Square Root

.format(k[i][0], k[i][1])) else: labels.append('hkl=1') for i in range(len(x)): ax.plot(E,T(x[i],E),label=labels[i]) plt.ylabel('$\Theta$ (mrad)') plt.xlabel('Energy (eV)') plt.legend(bbox_to_anchor=(0.99, 0.98), loc=1, borderaxespad=0.)

Это займет любые значения для построения x и печати квадратно-корневых символов по желанию (хотя я уверен, что есть лучшие способы сделать это)

Latex Square Root

0
ответ дан William Miller 24 March 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: