Мне нужно 10 чисел между RFMIn и RFMax с использованием linspace в python - PullRequest
1 голос
/ 27 мая 2020

Я читаю файл csv, и в этом файле csv есть столбцы
RFMin и RFMax

1000     3333  
5125.5    5888

Я хочу 10 чисел между RFMIn и RFMax с использованием linspace в python

import pandas as pd
Import numpy as np

df = csv.read_csv(filePath)
RFRange = np.linspace(RFMIn, RFMax, 10)
RFRange = RFRange.flatten()
RFarray=[]
for i in RFRange:
       RFarray.append(i)
dict = {‘RFRange’: RFarray}
data = pd.DataFrame(dict)
data.to_csv(‘Output.csv’, header=True, sep=’\t’)

Я хочу что-то вроде этого:

 1000
 1259.22
 1518.44
 1777.67
……..
…….
 3333
5125.5
5210.22
5294.94
……..
…….
5888

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Ваша проблема исходит от звонка на сглаживание. Функция flatten библиотеки matplotlib преобразует двумерный массив в одномерный массив. Однако по умолчанию это выполняется в строчном порядке (https://numpy.org/doc/1.18/reference/generated/numpy.ndarray.flatten.html).

In [1]: a = [1000,5125.5]

In [2]: b = [3333,5888]

In [3]: import numpy as np

In [4]: np.linspace(a,b,10)
Out[4]: 
array([[1000.        , 5125.5       ],
       [1259.22222222, 5210.22222222],
       [1518.44444444, 5294.94444444],
       [1777.66666667, 5379.66666667],
       [2036.88888889, 5464.38888889],
       [2296.11111111, 5549.11111111],
       [2555.33333333, 5633.83333333],
       [2814.55555556, 5718.55555556],
       [3073.77777778, 5803.27777778],
       [3333.        , 5888.        ]])

In [5]: np.linspace(a,b,10).flatten()
Out[5]: 
array([1000.        , 5125.5       , 1259.22222222, 5210.22222222,
       1518.44444444, 5294.94444444, 1777.66666667, 5379.66666667,
       2036.88888889, 5464.38888889, 2296.11111111, 5549.11111111,
       2555.33333333, 5633.83333333, 2814.55555556, 5718.55555556,
       3073.77777778, 5803.27777778, 3333.        , 5888.        ])

Как видите, это означает, что он преобразует ваши данные в формат, отличный от того, который вы ожидают.

Есть несколько способов изменить порядок. 1) Согласно https://numpy.org/doc/1.18/reference/generated/numpy.ndarray.flatten.html вы можете использовать упорядочивание по фортрану (по столбцам) при сведении

2) Вы можете транспонировать данные перед сведением RFRange = RFRange.T.flatten() / RFRange = RFRange.transpose().flatten()

3) Вы можете добавить второй l oop при добавлении и добавлении непосредственно из 2D-массива. Я бы посоветовал избегать этого метода. Это нормально для 10 точек, однако большие циклы могут быть довольно медленными в python, поэтому лучше использовать встроенные функции python, где это возможно. Например, в этом случае массив numpy1d можно легко преобразовать в список с помощью следующей команды: RFArray = list(RFRange)

0 голосов
/ 27 мая 2020

Вы хотите, чтобы массив был в порядке возрастания? Если это так, просто выполните RFarray.sort ()

...