Я пытаюсь реплицировать данные, умножая каждое значение на диапазон значений и сохраняя результаты в формате CSV.
Я создал функцию «Replicate_Data», которая принимает входной массив numpy и умножает на случайное значение между диапазоном. Как лучше всего создать 100 файлов и сохранить их как P3D1, P4D1 и так далее.
def Replicate_Data(data: np.ndarray) -> np.ndarray:
Rep_factor= random.uniform(-3,7)
data1 = data * Rep_factor
return data1
P2D1 = Replicate_Data(P1D1)
np.savetxt("P2D1.csv", P2D1, delimiter = "," , dtype = complex)
В вашей функции вы назначаете data1
, но не сохраняете и не собираете это между циклами. Затем вы возвращаете оригинал data
. Также вы не используете переменную итерации x
.
Я до сих пор не вижу, что делает ваш цикл for, кроме пустой траты времени
Спасибо @hpaulj Ввод в виде CSV-файла, содержащего 06 строк и 200 столбцов сложного типа. Данные считываются как P1D1 = genfromtxt('path', delimiter=',', dtype = 'complex') .
@hpaulj Да, ты прав. Я удалил цикл и получил тот же результат.
Вот пример, который вы можете использовать в качестве справки.
Я генерирую игрушечные данные с именем toy
, затем создаю n
случайные значения, используя np.random.uniform
, и вызываю их randos
, затем я умножаю эти два объекта, чтобы сформировать out
, используя трансляцию numpy. Вы также можете сделать это умножение в цикле (тот же самый, в котором вы сохраняете, на самом деле): в зависимости от размера вашего входного массива это может быть очень интенсивно, как я написал это. Более полный ответ, вероятно, зависит от формы ваших входных данных.
import numpy as np
toy = np.random.random(size=(2,2)) # a toy input array
n = 100 # number of random values
randos = np.random.uniform(-3,7,size=n) # generate 100 uniform randoms
# now multiply all elements in toy by the randoms in randos
out = toy[None,...]*randos[...,None,None] # this depends on the shape.
# this will work only if toy has two dimensions. Otherwise requires modification
# it will take a lot of memory... 100*toy.nbytes worth
# now save in the loop..
for i,o in enumerate(out):
name = 'P{}D1'.format(str(i+1))
np.savetxt(name,o,delimiter = ",")
# a second way without the broadcasting (slow, better on memory)
# more like 2*toy.nbytes
#for i,r in enumerate(randos):
# name = 'P{}D1'.format(str(i+1))
# np.savetxt(name,r*toy,delimiter = ",")
Спасибо @kevinkayaks. Входные данные в виде файла csv, содержащего 06 строк и 200 столбцов сложного типа. Данные читаются как P1D1 = genfromtxt('path', delimiter=',', dtype = 'complex'). Я пробовал этот пример, и он работал, однако он создает фигурные скобки "()" вокруг каждого значения в выходном csv.
вероятно, вам нужно очистить o
, прежде чем сохранять его. Проверьте o.shape
и посмотрите, есть ли у него лишняя пустая ось. Если это так, вы можете удалить его перед сохранением. Например, если o.shape
возвращает (1,1,200') you would save
o[:,0,:]` на каждой итерации цикла — лишняя ось уничтожается. Во всяком случае, только предположение. удачи
Вам и нам было бы полезно провести четкое различие между
csv
, файлом и структурой (массивом или списком), с которой вы начинаете. Мы не применяем функции к тексту в файле csv. Начните с маленькойndarray
и убедитесь, что функция возвращает правильный символ. Оставьте загрузку csv и сохраните на потом.