如何将函数应用于csv文件的每一行,并将新数据保存到新文件中



我有一个由10000行组成的MNIST数据集,我正试图将卷积内核应用于每一行,但我的代码只在完成后产生最后一行。它被重塑为28,28。这是原始数据集的一个片段。对应于MNIST数据的784个数字的10000行。

test_data_file = open("mnist_test.csv", 'r')      
test_data_list = test_data_file.readlines()    
test_data_file.close() 
for record in test_data_list:                  # test_data_list is all the values in the test file
all_values = record.split(',')             # split each record (image) into values seperated by commas
correct_label = int(all_values[0])         # the first value is the lab
inputs = (numpy.asfarray(all_values[1:]))    

original = numpy.asfarray(inputs.reshape((28,28)))    # the list is made into an array
sharpen_kernel = np.array([
[0, -1, 0],
[-1, 5, -1],
[0, -1, 0]])  

matplotlib.rcParams['figure.figsize'] = 20,20      # convolve your image with the kernel
conv_image = numpy.ones((28,28))

# make a subarray and convolve it with the kernel
step = 3
i=0
while i < 25:
i+=1
j = 0
while j < 25 :
sub_image = original[i:(i+step),j:(j+step):]    
sub_image = numpy.reshape(sub_image,(1,(step ** 2)))
kernel = numpy.reshape(sharpen_kernel, ((step ** 2),1))
conv_scalar = numpy.dot(sub_image,kernel)
sharpened[i,j] = conv_scalar
j+=1
pass

这是我将其np.savetxt保存到一个新文件中时得到的结果。你看,这只是一行。我想在应用内核后生成一个包含所有10000行的新csv文件。

当我绘制"锐化"的图像时,我只得到一个奇异的图像。我必须使用count+=函数还是在"for record in…"后面添加一个新循环线一个非常困惑的新手。

我建议您使用循环体,并将其移动到函数中。您可以使用numpy的array2string来获得每行输入的一行输出

def process(record: str) -> str:
# your loop's body
return numpy.array2string(sharpened, separator=',', suffix='n')
with test_data_file = open("mnist_test.csv", 'r'):
test_data_list = test_data_file.readlines()
with output_file = open("output.csv", 'w'):
for record in test_data_list:
output_file.write(process(record))

相关内容

  • 没有找到相关文章

最新更新