2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 замена символов в таблице mathematica
Сообщение30.06.2014, 13:38 
Здравствуйте,
Импортировал данные в Mathematica для обработки. В цифрах присутствуют символы "E", что означает "*10^" и "i", что означает мнимую единицу.
Как заменить "E" на "*10^" , а "i" на "I" командой? Дело в том, что каждый раз неудобно вручную делать Сtrl+F - FInd and Replace.

Заранее благодарен.

 
 
 
 Re: замена символов в таблице mathematica
Сообщение30.06.2014, 14:04 
Если данные в виде строк, то команда StringReplace. Если в виде списка чисел, то сначала можно применить к нему ToString, перобразовать, а потом ToExptession.

 
 
 
 Re: замена символов в таблице mathematica
Сообщение30.06.2014, 15:37 
Аватара пользователя
Очевидно, что данные в виде строк. Пусть мы имеем, например,
data = {"2.12E1-1+4i", "3.14E2-2i", "-11.44E-2+1.11i"};
Тогда с помощью
ToExpression@StringReplace[data, {"E" -> "*10^", "i" -> "I"}]
получаем то, что нужно.

 
 
 
 Re: замена символов в таблице mathematica
Сообщение30.06.2014, 16:41 
Господа, спасибо! Принцип понял! Следующий вопрос - как вставить кавычки в каждый элемент строки? У меня данные в виде таблицы.

 
 
 
 Re: замена символов в таблице mathematica
Сообщение30.06.2014, 18:33 
Кавычки просто не отображаются при выводе строки в OutputForm (и, может, ещё в каких-то), но они там есть.

 
 
 
 Re: замена символов в таблице mathematica
Сообщение30.06.2014, 18:47 
arseniiv в сообщении #882357 писал(а):
Кавычки просто не отображаются при выводе строки в OutputForm (и, может, ещё в каких-то), но они там есть.

если их убрать, то пример Aritaborian выдаёт failed

 
 
 
 Re: замена символов в таблице mathematica
Сообщение30.06.2014, 18:49 
Тогда я неправильно понял вас.

Из примера их убирать не надо, но если импортирован список строк, к его элементам кавычки добавлять не нужно.

 
 
 
 Re: замена символов в таблице mathematica
Сообщение30.06.2014, 23:40 
Аватара пользователя
2012, давайте разберёмся. В каком формате вы импортируете данные?

 
 
 
 Re: замена символов в таблице mathematica
Сообщение01.07.2014, 09:45 
Aritaborian в сообщении #882490 писал(а):
2012, давайте разберёмся. В каком формате вы импортируете данные?

Импортирую в виде таблицы
Код:
{{2.5*10^14,
  "-0.0038147498817485063+8.279487591496779E-4i"}, {2.51*10^14,
  "-0.003729687450719608+9.94969042170409E-4i"}, {2.52*10^14,
  "-0.0036211600058859493+0.0011484939817962806i"},...},

 
 
 
 Re: замена символов в таблице mathematica
Сообщение01.07.2014, 12:40 
Аватара пользователя
Ну тогда нужно, как указывал arseniiv, сначала перевести данные в строковый формат (ToString), а затем действовать по моему рецепту.

 
 
 
 Re: замена символов в таблице mathematica
Сообщение01.07.2014, 15:20 
Так вот же они, строки — во вторых элементах каждой пары. С ними и провести обряд, остальное трогать не надо. Надеюсь, вы не имели в виду преобразование всего сразу в строку.

 
 
 
 Re: замена символов в таблице mathematica
Сообщение01.07.2014, 15:33 
Аватара пользователя
Блин, внимательнее нужно быть :facepalm: Ну тогда берём второй столбец и преобразуем только его. Без ToString, конечно же.
Хотя... Да пофиг, на самом-то деле. Попытка преобразования строки в строку не выдаст ошибки. So, можно не обращать внимания, что там в кавычках, а что без, и работать со всем списком сразу, как я с самого начала и предлагал. Конвертируем всё в строки, находим-заменяем, конвертируем обратно в числа.

 
 
 
 Re: замена символов в таблице mathematica
Сообщение01.07.2014, 16:51 
Ребята, вышло!
Код:
In[430]:= h1 = Import["C:\\1.txt", "String"]

Out[430]= "% Model:              1.mph
% Version:            COMSOL 4.4.0.150
% Date:               Jul 1 2014, 12:36
% Table:              Table 6 - Line Average 1 (emw.Hz)
% freq                                            Magnetic field, z \
component (A/m)
2.5E14                                            \
-0.003662239310465777-4.05264920233293E-4i
2.51E14                                           \
-0.003769916226571995-2.2145684579596164E-4i
2.52E14                                           \
-0.0038433889431836424-2.1631262077027855E-5i
2.53E14                                           \
-0.003881062128518195+1.8783739515669515E-4i
2.54E14                                           \
-0.00388250522422471+4.0061534949025753E-4i
2.55E14                                           \
-0.0038483662891500656+6.106092250516684E-4i
2.56E14                                           \
-0.003780257529840293+8.121319574146916E-4i
2.57E14                                           \
-0.0036806223896576444+0.001000033393841302i
2.58E14                                           \
-0.0035525929565530206+0.0011697963733597594i
2.59E14                                           \
-0.003399845006246796+0.0013176007358062021i"

In[431]:= h2 = StringDrop[h1, 247];

In[433]:= h3 = StringReplace[h2, {"E" -> "*10^", "i" -> " I"}]

Out[433]= "2.5*10^14                                            \
-0.003662239310465777-4.05264920233293*10^-4 I
2.51*10^14                                           \
-0.003769916226571995-2.2145684579596164*10^-4 I
2.52*10^14                                           \
-0.0038433889431836424-2.1631262077027855*10^-5 I
2.53*10^14                                           \
-0.003881062128518195+1.8783739515669515*10^-4 I
2.54*10^14                                           \
-0.00388250522422471+4.0061534949025753*10^-4 I
2.55*10^14                                           \
-0.0038483662891500656+6.106092250516684*10^-4 I
2.56*10^14                                           \
-0.003780257529840293+8.121319574146916*10^-4 I
2.57*10^14                                           \
-0.0036806223896576444+0.001000033393841302 I
2.58*10^14                                           \
-0.0035525929565530206+0.0011697963733597594 I
2.59*10^14                                           \
-0.003399845006246796+0.0013176007358062021 I"

Но как теперь мне обратно в виде таблице перевести?
Чтобы было вот так:
Код:
In[435]:= h4 = Import["C:\\1.txt", "Table"]

Out[435]= {{"%", "Model:", "1.mph"}, {"%", "Version:", "COMSOL",
  "4.4.0.150"}, {"%", "Date:", "Jul", 1, "2014,", "12:36"}, {"%",
  "Table:", "Table", 6, "-", "Line", "Average", 1, "(emw.Hz)"}, {"%",
  "freq", "Magnetic", "field,", "z", "component",
  "(A/m)"}, {2.5*10^14,
  "-0.003662239310465777-4.05264920233293E-4i"}, {2.51*10^14,
  "-0.003769916226571995-2.2145684579596164E-4i"}, {2.52*10^14,
  "-0.0038433889431836424-2.1631262077027855E-5i"}, {2.53*10^14,
  "-0.003881062128518195+1.8783739515669515E-4i"}, {2.54*10^14,
  "-0.00388250522422471+4.0061534949025753E-4i"}, {2.55*10^14,
  "-0.0038483662891500656+6.106092250516684E-4i"}, {2.56*10^14,
  "-0.003780257529840293+8.121319574146916E-4i"}, {2.57*10^14,
  "-0.0036806223896576444+0.001000033393841302i"}, {2.58*10^14,
  "-0.0035525929565530206+0.0011697963733597594i"}, {2.59*10^14,
  "-0.003399845006246796+0.0013176007358062021i"}}

 
 
 
 Re: замена символов в таблице mathematica
Сообщение01.07.2014, 22:06 
Аватара пользователя
Ну ToExpression же, мы ведь уже об этом говорили.

 
 
 [ Сообщений: 14 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group