2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Поэлементное сравнение массива с числом, Mathematica
Сообщение16.03.2012, 20:15 


09/12/08
9
Здравствуйте.

У меня следующая проблема - необхидомо написать цикл проверки каждого элемента массива на то больше он нуля или меньше. Если меньше - заменить этот элемент нулем, если больше - возвести в 3ю степень. Вещь довольно простая.

Вот мой цикл, но он не работает:

x = Array[{#1} &, 250];
u1 = 15;
If [(x - u1) < 0, 0, (x - u1)^3]

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

Заранее спасибо!

Подскажите, пожалуйста, в чем ошибка?

 Профиль  
                  
 
 Re: Поэлементное сравнение массива с числом, Mathematica
Сообщение16.03.2012, 20:39 


20/12/11
44
Может подойдет такое безцикленное решение:
Код:
Clear[f];
f[x_ /; x <= 0] := 0;
f[x_ /; x > 0] := x^3;

x = Table[RandomInteger[{-100, 100}], {i, 250}]
Map[f, x]

 Профиль  
                  
 
 Re: Поэлементное сравнение массива с числом, Mathematica
Сообщение16.03.2012, 21:07 


09/12/08
9
Да, спасибо большое!

Я его немного модифицировал под свой пример, но сейчас работает так как нужно. Я Математикой пользуюсь совсем недавно и, если честно, о таком варианте решения даже не подозревал.

В принципе, тему можно закрывать, но было бы интересно узнать почему мой If не работал.
В любом случае, большое спасибо за ответ!

 Профиль  
                  
 
 Re: Поэлементное сравнение массива с числом, Mathematica
Сообщение16.03.2012, 21:32 


20/12/11
44
На самом деле, мне стоило объявить f так:
Код:
f[x_] := If[x <= 0, 0, x^3]

Теперь про ваш if. Сравните
Код:
{-1, 1} < 0
и
Код:
-1 < 0

Первое не логическое выражение.

 Профиль  
                  
 
 Re: Поэлементное сравнение массива с числом, Mathematica
Сообщение17.03.2012, 01:13 


09/12/08
9
В том-то и дело. Математика пытается сравнить весь массив с числом. А я так понимаю, что если она работает с массивом поэлементно, то и сравнивать должна поэлементно, то есть каждый элемент массива сравнивать с нулем.
У меня же этого не происходит. Получается, что либи я накосячил (99.9%), либо то, что я хочу сделать таким способом реализовать нельзя (0.1%).

 Профиль  
                  
 
 Re: Поэлементное сравнение массива с числом, Mathematica
Сообщение17.03.2012, 11:21 


20/12/11
44
В общем случае Mathematica не работает со списками поэлементно. Поэлементная работа -- это автоматическое применение функции к каждому элементу списка. Например, сложение.
Пусть:
Код:
In> x = {a, b, c};

Прибавим число 2.
Код:
In> x + 2

Значок + превращается в функцию Plus. То же самое, но в другой форме.
Код:
In> Plus[{a, b, c}, 2]
Out> {2+a,2+b,2+c}

Двойка прибавилась к каждому элементу. Это произошло потому, что Plus имеет атрибут Listable.
Код:
In> Attributes[Plus]
Out> {Flat, Listable, NumericFunction, OneIdentity, Orderless, Protected}

Значок < превращается в функцию Less.
Код:
In> HoldForm[2 < 0] // FullForm
Out> HoldForm[Less[2,0]]

У нее нет атрибута Listable, поэтому она не будет автоматически применяться к каждому элементу списка, что и произошло в вашем коде.
Код:
In> Attributes[Less]
Out> {Protected}

In> Less[x, 0]
Out> {a,b,c}<0

После применения Less к каждому элементу списка, у нас будет список логических значений, который все равно не получится использовать в If как задумывалось.
Код:
In> x={1,-2,3};
Map[(#1<0)&,x]
If[%,0,x^3]
Out> {False,True,False}
Out> If[{False,True,False},0,x^3]

 Профиль  
                  
 
 Re: Поэлементное сравнение массива с числом, Mathematica
Сообщение17.03.2012, 22:46 


09/12/08
9
Ясно. Спасибо вам большое за помощь!

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group