পাইপটন নম্পিটি ন্যাডারেগুলি মুদ্রণ করার সময়, পাঠ্য ন্যায়সঙ্গতকরণ, বৃত্তাকার এবং মুদ্রণের বিকল্পগুলি মুদ্রণ করার সময় সমস্ত ক্ষতিকারক স্বরলিপিটি ফোর্স করে:
নিম্নলিখিতটি যা চলছে তার একটি ব্যাখ্যা, কোড ডেমোসের জন্য নীচে স্ক্রোল করুন।
পরামিতি পাসিং suppress=True
ফাংশন set_printoptions
সংখ্যা ডিফল্ট 8 চরিত্র ভালো, এটি বরাদ্দ স্থান মাপসই কেবল কাজ করে:
import numpy as np
np.set_printoptions(suppress=True) #prevent numpy exponential
#notation on print, default False
# tiny med large
a = np.array([1.01e-5, 22, 1.2345678e7]) #notice how index 2 is 8
#digits wide
print(a) #prints [ 0.0000101 22. 12345678. ]
তবে আপনি যদি 8 টি অক্ষরের চেয়েও বেশি সংখ্যায় পাস করেন তবে এটির মতো সূচকীয় চিহ্নটি আবার চাপানো হবে:
np.set_printoptions(suppress=True)
a = np.array([1.01e-5, 22, 1.2345678e10]) #notice how index 2 is 10
#digits wide, too wide!
#exponential notation where we've told it not to!
print(a) #prints [1.01000000e-005 2.20000000e+001 1.23456780e+10]
আপনার নাম্বারটি অর্ধেক কেটে এইভাবে ভুল উপস্থাপন করার জন্য বা তাত্পর্যপূর্ণ স্বরলিপি জোর করার মধ্যে নম্পির একটি পছন্দ রয়েছে it
set_printoptions(formatter=...)
মুদ্রণ এবং বৃত্তাকার জন্য বিকল্পগুলি নির্দিষ্ট করতে এখানে উদ্ধার আসে । set_printoptions
খালি একটি খালি ফ্লোট মুদ্রণ করতে বলুন :
np.set_printoptions(suppress=True,
formatter={'float_kind':'{:f}'.format})
a = np.array([1.01e-5, 22, 1.2345678e30]) #notice how index 2 is 30
#digits wide.
#Ok good, no exponential notation in the large numbers:
print(a) #prints [0.000010 22.000000 1234567799999999979944197226496.000000]
আমরা সূচকীয় স্বরলিপিটি জোর-দমন করেছি, তবে এটি বৃত্তাকার বা ন্যায়সঙ্গত নয়, সুতরাং অতিরিক্ত বিন্যাসের বিকল্পগুলি নির্দিষ্ট করুন:
np.set_printoptions(suppress=True,
formatter={'float_kind':'{:0.2f}'.format}) #float, 2 units
#precision right, 0 on left
a = np.array([1.01e-5, 22, 1.2345678e30]) #notice how index 2 is 30
#digits wide
print(a) #prints [0.00 22.00 1234567799999999979944197226496.00]
নাদারেরয়েগুলির সমস্ত ক্ষতিকারক ধারণাটি জোর-দমন করার অপূর্ণতাটি হ'ল যদি আপনার নাদারেরে এটির অনন্তের কাছে একটি বিশাল ভাসমানের মান পেয়ে যায় এবং আপনি এটি মুদ্রণ করেন, তবে আপনি সংখ্যায় পূর্ণ পৃষ্ঠা সহ মুখে ব্লাস্ট হয়ে যাবেন।
সম্পূর্ণ উদাহরণ ডেমো 1:
from pprint import pprint
import numpy as np
#chaotic python list of lists with very different numeric magnitudes
my_list = [[3.74, 5162, 13683628846.64, 12783387559.86, 1.81],
[9.55, 116, 189688622.37, 260332262.0, 1.97],
[2.2, 768, 6004865.13, 5759960.98, 1.21],
[3.74, 4062, 3263822121.39, 3066869087.9, 1.93],
[1.91, 474, 44555062.72, 44555062.72, 0.41],
[5.8, 5006, 8254968918.1, 7446788272.74, 3.25],
[4.5, 7887, 30078971595.46, 27814989471.31, 2.18],
[7.03, 116, 66252511.46, 81109291.0, 1.56],
[6.52, 116, 47674230.76, 57686991.0, 1.43],
[1.85, 623, 3002631.96, 2899484.08, 0.64],
[13.76, 1227, 1737874137.5, 1446511574.32, 4.32],
[13.76, 1227, 1737874137.5, 1446511574.32, 4.32]]
#convert python list of lists to numpy ndarray called my_array
my_array = np.array(my_list)
#This is a little recursive helper function converts all nested
#ndarrays to python list of lists so that pretty printer knows what to do.
def arrayToList(arr):
if type(arr) == type(np.array):
#If the passed type is an ndarray then convert it to a list and
#recursively convert all nested types
return arrayToList(arr.tolist())
else:
#if item isn't an ndarray leave it as is.
return arr
#suppress exponential notation, define an appropriate float formatter
#specify stdout line width and let pretty print do the work
np.set_printoptions(suppress=True,
formatter={'float_kind':'{:16.3f}'.format}, linewidth=130)
pprint(arrayToList(my_array))
ছাপে:
array([[ 3.740, 5162.000, 13683628846.640, 12783387559.860, 1.810],
[ 9.550, 116.000, 189688622.370, 260332262.000, 1.970],
[ 2.200, 768.000, 6004865.130, 5759960.980, 1.210],
[ 3.740, 4062.000, 3263822121.390, 3066869087.900, 1.930],
[ 1.910, 474.000, 44555062.720, 44555062.720, 0.410],
[ 5.800, 5006.000, 8254968918.100, 7446788272.740, 3.250],
[ 4.500, 7887.000, 30078971595.460, 27814989471.310, 2.180],
[ 7.030, 116.000, 66252511.460, 81109291.000, 1.560],
[ 6.520, 116.000, 47674230.760, 57686991.000, 1.430],
[ 1.850, 623.000, 3002631.960, 2899484.080, 0.640],
[ 13.760, 1227.000, 1737874137.500, 1446511574.320, 4.320],
[ 13.760, 1227.000, 1737874137.500, 1446511574.320, 4.320]])
সম্পূর্ণ উদাহরণ ডেমো 2:
import numpy as np
#chaotic python list of lists with very different numeric magnitudes
# very tiny medium size large sized
# numbers numbers numbers
my_list = [[0.000000000074, 5162, 13683628846.64, 1.01e10, 1.81],
[1.000000000055, 116, 189688622.37, 260332262.0, 1.97],
[0.010000000022, 768, 6004865.13, -99e13, 1.21],
[1.000000000074, 4062, 3263822121.39, 3066869087.9, 1.93],
[2.91, 474, 44555062.72, 44555062.72, 0.41],
[5, 5006, 8254968918.1, 7446788272.74, 3.25],
[0.01, 7887, 30078971595.46, 27814989471.31, 2.18],
[7.03, 116, 66252511.46, 81109291.0, 1.56],
[6.52, 116, 47674230.76, 57686991.0, 1.43],
[1.85, 623, 3002631.96, 2899484.08, 0.64],
[13.76, 1227, 1737874137.5, 1446511574.32, 4.32],
[13.76, 1337, 1737874137.5, 1446511574.32, 4.32]]
import sys
#convert python list of lists to numpy ndarray called my_array
my_array = np.array(my_list)
#following two lines do the same thing, showing that np.savetxt can
#correctly handle python lists of lists and numpy 2D ndarrays.
np.savetxt(sys.stdout, my_list, '%19.2f')
np.savetxt(sys.stdout, my_array, '%19.2f')
ছাপে:
0.00 5162.00 13683628846.64 10100000000.00 1.81
1.00 116.00 189688622.37 260332262.00 1.97
0.01 768.00 6004865.13 -990000000000000.00 1.21
1.00 4062.00 3263822121.39 3066869087.90 1.93
2.91 474.00 44555062.72 44555062.72 0.41
5.00 5006.00 8254968918.10 7446788272.74 3.25
0.01 7887.00 30078971595.46 27814989471.31 2.18
7.03 116.00 66252511.46 81109291.00 1.56
6.52 116.00 47674230.76 57686991.00 1.43
1.85 623.00 3002631.96 2899484.08 0.64
13.76 1227.00 1737874137.50 1446511574.32 4.32
13.76 1337.00 1737874137.50 1446511574.32 4.32
0.00 5162.00 13683628846.64 10100000000.00 1.81
1.00 116.00 189688622.37 260332262.00 1.97
0.01 768.00 6004865.13 -990000000000000.00 1.21
1.00 4062.00 3263822121.39 3066869087.90 1.93
2.91 474.00 44555062.72 44555062.72 0.41
5.00 5006.00 8254968918.10 7446788272.74 3.25
0.01 7887.00 30078971595.46 27814989471.31 2.18
7.03 116.00 66252511.46 81109291.00 1.56
6.52 116.00 47674230.76 57686991.00 1.43
1.85 623.00 3002631.96 2899484.08 0.64
13.76 1227.00 1737874137.50 1446511574.32 4.32
13.76 1337.00 1737874137.50 1446511574.32 4.32
লক্ষ্য করুন যে বৃত্তাকারটি 2 ইউনিটের যথার্থতার সাথে সামঞ্জস্যপূর্ণ এবং খুব বড় e+x
এবং খুব ছোট উভয় রেঞ্জেই সূচকীয় স্বরলিপি দমন করা হয় e-x
।
numpy.set_printoptions
কীভাবে নাম্বার অ্যারে মুদ্রিত হয় তা নিয়ন্ত্রণ করে। তবে সম্পূর্ণরূপে বৈজ্ঞানিক স্বরলিপি দমন করার কোনও বিকল্প নেই। এটি স্যুইচ করছে কারণ আপনার মান 1e-2 থেকে 1e9 অবধি রয়েছে। আপনার যদি আরও ছোট পরিসীমা থাকে তবে এটি প্রদর্শন করতে এটি বৈজ্ঞানিক স্বরলিপি ব্যবহার করবে না।print
যদিও তারা কীভাবে প্রদর্শিত হবে তা কেন তা বিবেচনা করে ? আপনি যদি এটি সংরক্ষণ করার চেষ্টা করেনsavetxt
, ইত্যাদি ব্যবহার করুন