Создать новый список в условиях из существующего


1

У меня есть внешний файл (data.out), который я прочитал его с Mathematica, используя

data = ReadList["data.out", Number, RecordLists -> True]; 

Этот файл содержит три столбца (x,y,f) тысяч данных. Вот небольшой пример этого:

0.30000000 0.00000000 0.1679035061279048E+02 
2.30000000 0.50000000 0.1195447110986367E+01 
0.10000000 0.00000000 0.2179035061279048E+02 
5.80000000 2.50000000 0.7195447110986367E+01 
3.00000000 0.00000000 0.4679035061279048E+02 
7.90000000 7.50000000 0.1195447110986367E+01 
4.70000000 2.00000000 0.8679035061279048E+01 
1.20000000 4.50000000 0.2195447110986367E+01 

Теперь я хочу использовать Mathematica для того, чтобы манипулировать data список, создавая новый dataMod, которая будет иметь такую ​​структуру (x,y,f,f1). Очевидно, что есть новый элемент (f1) в списке dataMod. Ну, если $0 \leq f < 5$ , $f1$ должно быть случайным числом в интервале $10^{- 4}< f1 \leq \sqrt2$ , если $5 \leq f < 7$ , $f1$ должно быть случайное число в интервале $10^{- 7}\leq f1 \leq 10^{- 4}$ , а если $f \geq 7$ , то $f1$ должно быть случайным числом в интервале $10^{- 12}< f1 < 10^{- 7}$ .

Любые идеи, как это сделать?

+1

Я могу только второй комментарий @ Anon: пожалуйста, покажите, что вы уже пробовали и отформатировали любые данные, чтобы быть полезными для дальнейшего использования. 24 авг. 132013-08-24 14:22:35

  0

@YvesKlett Спасибо за напоминание. Я буду учитывать это в будущих вопросах. 24 авг. 132013-08-24 14:38:40

5

Это просто, например:

f1[x_] := Which[ 
    0 <= x < 5, RandomReal[{10^(-4), Sqrt[2]}], 
    5 <= x < 7, RandomReal[{ 10^(-7), 10^(-4)}], 
    x >= 7, RandomReal[{10^(-12), 10^(-7)}] 
    ] 
dataMod = {##, f1[#3]} & @@@ data (* Kuba's version *) 

Или в конечной стадии

dataMod = {Sequence @@ #, f1[#[[3]]]} & /@ data (* Old version *) 

Это хорошая идея, чтобы включить то, что вы пытались сделать, так это показывает, как вы сделали некоторые усилия, чтобы решить проблему самостоятельно. Также, когда вы хотите включить данные, вы должны включить их в список, в этом случае не имеет значения, что это был файл этого формата.

  0

hm, 52 seconds :) 24 авг. 132013-08-24 14:18:11

  0

@PinguinDirk Yup XD 24 авг. 132013-08-24 14:18:44

  0

удалена моя, такая же идея, в следующий раз она будет моей :) 24 авг. 132013-08-24 14:19:25

  0

@PinguinDirk Ах, ладно, это было мило. Я не ожидал этого, я запомню его в следующий раз :) 24 авг. 132013-08-24 14:20:30

  0

не нужно помнить, я просто буду быстрее :) 24 авг. 132013-08-24 14:21:08

+1

Вместо 'Sequence' вы можете' {##, f1 [# 3]} & @@@ data' :) 24 авг. 132013-08-24 15:19:05

  0

@Kuba Это выглядит намного лучше, я обновляю свой ответ с этим типом. 24 авг. 132013-08-24 15:20:33