【问题标题】:Applying a simple function to CSV and save multiple csv files对 CSV 应用一个简单的函数并保存多个 csv 文件
【发布时间】:2019-10-14 06:56:59
【问题描述】:

我试图通过将每个值与一系列值相乘来复制数据,并将结果保存为 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)

【问题讨论】:

  • 如果您和我们明确区分csv、文件和您开始使用的结构(数组或列表),这将有所帮助。我们不对 csv 文件中的文本应用函数。从一个小的ndarray 开始,并确保函数返回正确的。保留 csv 加载并保存到以后。
  • 在您的函数中,您分配给data1,但不要在循环之间保存或收集它。然后你返回原来的data。你也不要使用 x 迭代变量。
  • 我仍然看不到你的 for 循环做了什么,除了浪费时间
  • 感谢@hpaulj 输入为 csv 文件,包含 06 行和 200 列的复杂类型。数据读取为 P1D1 = genfromtxt('path', delimiter=',', dtype = 'complex') 。
  • @hpaulj 是的,你是对的。我已经删除了循环并得到了相同的输出。

标签: python csv numpy export-to-csv


【解决方案1】:

这是一个您可以用作参考的示例。

我生成名为toy 的玩具数据,然后我使用np.random.uniform 生成n 随机值并将其命名为randos,然后我将这两个对象相乘以使用numpy 广播形成out。您也可以在循环中执行此乘法(实际上与您保存的相同):根据输入数组的大小,它可能会占用大量内存,因为我已经编写了它。更完整的答案可能取决于您输入数据的形状。

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,:]` - 会杀死额外的轴。无论如何,只是猜测。祝你好运
猜你喜欢
  • 1970-01-01
  • 2017-12-28
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-17
相关资源
最近更新 更多