ভাসমান পয়েন্ট ডেটা সংকুচিত করা


26

ভাসমান পয়েন্ট বৈজ্ঞানিক ডেটা সংকুচিত করার জন্য বিশেষভাবে ডিজাইন করা কোনও সরঞ্জাম রয়েছে?

যদি কোনও ফাংশন মসৃণ হয় তবে স্পষ্টতই সেই ফাংশনের প্রতিনিধিত্বকারী সংখ্যার মধ্যে অনেকগুলি পারস্পরিক সম্পর্ক রয়েছে, সুতরাং ডেটাটি ভালভাবে সংকোচিত হওয়া উচিত। বাইনারি ভাসমান পয়েন্টের ডেটা জিপ করা / জিপিং করা যদিও এটি এতটা সংকোচিত হয় না। আমি ভাবছি যে ভাসমান পয়েন্টের ডেটা সংকুচিত করার জন্য বিশেষত কোনও পদ্ধতি তৈরি করা হয়েছে কিনা।

প্রয়োজনীয়তা:

  • হয় লসলেস সংকোচন বা ধরে রাখার জন্য ন্যূনতম সংখ্যা নির্দিষ্ট করার সম্ভাবনা (কিছু অ্যাপ্লিকেশনগুলির জন্য doubleআমাদের প্রয়োজনের তুলনায় আরও বেশি হতে পারে যখন floatপর্যাপ্ত নির্ভুলতা নাও থাকতে পারে)।

  • ভাল পরীক্ষিত ওয়ার্কিং টুল (যেমন কোনও তাত্ত্বিক পদ্ধতি বর্ণনা করে এমন একটি কাগজই নয়)।

  • 1D সংখ্যার তথ্য সংকুচিত করার জন্য উপযুক্ত (যেমন একটি সময় সিরিজ)

  • ক্রস প্ল্যাটফর্ম (উইন্ডোজে অবশ্যই কাজ করা উচিত)

  • এটি অবশ্যই দ্রুত --- জিজিপের চেয়ে ধীর গতির নয়। আমি দেখতে পেলাম যে যদি আমার কাছে নম্বরগুলি ASCII হিসাবে সঞ্চয় করা থাকে তবে ফাইলটি জিপিং করা এটি পড়তে এবং প্রক্রিয়াকরণে গতি বাড়িয়ে তুলতে পারে (যেহেতু অপারেশনটি I / O সীমাবদ্ধ হতে পারে)।

আমি বিশেষত এমন লোকদের কাছ থেকে শুনতে চাই যারা আসলে এই জাতীয় সরঞ্জাম ব্যবহার করেছে।


এটি আংশিকভাবে এফএলএসি- র অস্তিত্ব দ্বারা অনুপ্রাণিত হয়েছিল , যা সুপারিশ করে যে একটি বিশেষায়িত পদ্ধতি জিজিপের চেয়ে ভাল করা উচিত (অনেক?)।
জাজাবলস

আমি অপেক্ষায় থাকবো এই এখন।
স্যাজাবলস

ঝরঝরে। আমি এই এক ঘূর্ণি দিতে যাচ্ছি।
meawoppl

উত্তর:


22

Blosc চেষ্টা করে দেখুন । এটি মেমকপির চেয়ে অনেক ক্ষেত্রেই দ্রুত । আরেক বারের চিন্তা করুন। । । দুষ্ট।

এটি সুপার স্থিতিশীল, উচ্চ-পরীক্ষিত, ক্রস-প্ল্যাটফর্ম এবং একটি চ্যাম্পের মতো সম্পাদন করে।


ওহ বাহ, এটি সত্যিই দুর্দান্ত (এবং আমার কাছে নতুন!)
অ্যারন আহমদিয়া

লিঙ্কটি নষ্ট হয়ে গেছে। কোন সুযোগ আপনি জানতে চান এটি এখন কোথায়?
অ্যালেক্সিস উইল্কে

1
@ অ্যালেক্সিসওয়িলকে আমি লিঙ্কটি ঠিক করেছি। এটি ব্লসকের জন্য গুগল অনুসন্ধানে প্রথম ফলাফল ছিল।
ডগ লিপিনস্কি

1
ব্লাসক সম্ভবত দ্রুত তবে ফ্লোট অ্যারেতে এর সংকোচনের হারটি একটি বিপর্যয়। সেরা সংকোচনের সাথে এটি এর মূল আকারের প্রায় 98% এর ফলাফল দেয়। যে কোনও ক্ষেত্রে পরামর্শ দেওয়ার জন্য ধন্যবাদ।

ভাসমান অ্যারেতে সংকোচনের বিষয়টি সামগ্রীর উপর নির্ভর করে। আমার সন্দেহ হয় আপনি যে বিটগুলি সংক্ষিপ্ত করছেন তার মধ্যে খুব অল্প (কাঠামোগত) তথ্য রয়েছে। এছাড়াও, ব্লস্ক 5 বছর পরেও সক্রিয় দেবের অধীনে রয়েছে!
meawoppl

7

আমি এইচডিএফ 5 এবং এর জিজেআইপি ফিল্টার ব্যবহার করে ভাল ফলাফল পেয়েছি ।

এইচডিএফ 5 এছাড়াও একটি এসজেপিআইপি ফিল্টার সরবরাহ করে যা কিছু বৈজ্ঞানিক ডেটা-সেটগুলির জন্য আরও ভাল ফলাফল অর্জন করে।

আমার অভিজ্ঞতায় সংকোচনের পছন্দটি নির্ভর করে যে ধরণের ডেটা এবং তার উপর বেঞ্চমার্কিং সম্ভবত একটি ভাল পছন্দ করার একমাত্র উপায়।

BTW, তৃতীয় পক্ষের ফিল্টার HDF5 জন্য BLOSC, BZIP2, LZO, LZF, MAFISC অন্তর্ভুক্ত।


ধন্যবাদ উত্তর fot! আমি এইচডিএফ 5 বেশি ব্যবহার করি নি। এটি কি ঠিক যে এইচডিএফ 5 ফর্ম্যাট সহ জিজিপ ফিল্টারটি ব্যবহার করে আমাকে ফ্ল্যাট বাইনারি ফাইলটিতে সমস্ত সংখ্যা লিখতে এবং জিজিপ দিয়ে চালানোর মত একই সংক্ষেপণ অনুপাতটি দিতে চলেছে? (এই মুহুর্তে এইচডিএফ 5 ব্যবহারের সম্ভাব্য সুবিধা / অসুবিধা উপেক্ষা করুন।) এসজেডআইপি সম্পর্কিত, এটি কোনও উপায়ে ভাসমান পয়েন্ট ডেটাসেটের জন্য অনুকূলিত হয়েছে? (আমি কৌতূহলী এবং আপনার লিঙ্ক করা পৃষ্ঠাটি স্কিমিং থেকে এটি পরিষ্কার নয়) পৃষ্ঠাটি বলছে এসজেডআইপির প্রাথমিক সুবিধা গতি। জিজেআইপিও বেশ চটজলদি (সাধারণত জিজিপ ডিকম্প্রেশন আমার জন্য তুচ্ছ লাগে)।
কাজ Szabolcs

একটি জিজেপযুক্ত ফ্ল্যাট বাইনারি ফাইল সম্ভবত জিজিপ ফিল্টার সহ এইচডিএফ 5 ফাইলের চেয়ে ছোট হবে কারণ এইচডিএফ 5 কাঁচা ডেটার চেয়ে বেশি। কখনও কখনও একটি শ্যাফেল ফিল্টার দিয়ে প্রিপ্রোসেসিং gzip ফলাফলগুলি উন্নত করতে পারে। তবে আপনি ঠিক বলেছেন, সুবিধাগুলি আরও বেশি সুবিধার্থে। এইচডিএফ 5 এর সাথে আমি কম্প্রেশন ফিল্টারটি পরিবর্তন করা সহজ (পৃথক সেটিংস ব্যবহার করে দেখুন) এবং এইচডিএফ 5 আপনার ডেটার উপগ্রহগুলিকে অ্যাক্সেসের জন্য ফাংশন সরবরাহ করে (সময় সিরিজের অন্তর)।
f3lix

1
আপনি যদি এই রুটে যান তবে পাইটাইবলগুলি পরীক্ষা করে দেখুন । এটি কোডের উপরের কয়েকটি লাইন তৈরি করে। Blosc লেখক দ্বারা রক্ষণাবেক্ষণ (আগে কমপক্ষে)।
meawoppl

6

[1,1]

অন্তর্নিহিত ফাংশনের উপর নির্ভর করে, আপনি কোনও ত্রুটি ছাড়াই ফাংশনাল ফর্মের সাথে ডেটা ফিট করতে সক্ষম হতে পারেন, আপনার কাছে ডাটা পয়েন্ট (সংকোচনের দিকে পরিচালিত) এর চেয়ে কার্যকরী ফর্মটি বর্ণনা করার জন্য কম সহগতির প্রয়োজন। এই কয়েকটি পদ্ধতির জন্য ত্রুটির ফলাফল উপস্থিত রয়েছে, যদিও আমি জানি না যে সেগুলির মধ্যে কেউ আপনাকে ত্রুটির উপর ভিত্তি বা পূর্বনির্মাণ (বা পূর্ববর্তী ) দেবে কিনা।

আপনি এফপিসি এবং সম্পর্কিত অ্যালগরিদমের মতো ভাসমান পয়েন্ট সংখ্যাগুলির সংক্ষেপণের জন্য বিশেষত বিকাশিত পদ্ধতিগুলিও দেখতে পারেন। কাগজপত্র দেখুন এখানে , এখানে , এখানে , এখানে , এবং এখানে , পুরাতন সোর্স কোড সম্বলিত একটি ওয়েব পেজ সহ এখানে


আসলে আমি জিজিপের অনুরূপ তৈরি সরঞ্জামগুলিতে আগ্রহী যেগুলি আমার পক্ষ থেকে কোনও কাজের প্রয়োজন হয় না, বিশেষত আমার নিজস্ব পদ্ধতিটি বিকাশ এবং টিউন না করে। এছাড়াও, এমন একটি পদ্ধতি ব্যবহার করা সুবিধাজনক হবে যার জন্য ডিসেমপ্রেস করার আগে পুরো জিনিসটি মেমরির মধ্যে পড়ার প্রয়োজন হয় না কারণ আমার কাছে খুব বড় ডেটা ফাইলগুলি ক্রমান্বয়ে প্রক্রিয়াজাত করা যেতে পারে (এটি জিজিপ সহ কাজ করে, তবে আমি যদি ফুরিয়ার ব্যবহার করি না তবে নয়) রূপান্তর করুন, যদি না আমি নিজেকে তথ্যগুলিকে টুকরো টুকরো টুকরো করে ফেলেছি, পুরো জিনিসটিকে আরও জটিল করে তুলছি) এমন কিছু যা ধরে নেয় যে আমার ডেটাফাইলটি বাইনারি ডাবলগুলির একটি সিরিজ মাত্র দুর্দান্ত।
Szabolcs

এছাড়াও এগুলি 1: 1 রূপান্তরগুলি আসলে সংকোচনের কৌশল নয়। এগুলি ডেটা তৈরি করতে ব্যবহার করা যেতে পারে যা একটি নিরীহ সংকোচনের অ্যালগরিদম আরও ভাল করতে পারে তবে কোনও সমাধান নয়।
meawoppl

এর মধ্যে কয়েকটি পদ্ধতি সংকেত প্রক্রিয়াকরণে ব্যবহৃত সংক্ষেপণ অ্যালগরিদমের গাণিতিক ভিত্তি তৈরি করে, যা উত্তরের পিছনে ধারণা ছিল। এই রূপান্তরগুলি সাধারণত বিশেষ পরিস্থিতিতে বাদে 1: 1 নয়।
জিওফ অক্সবেরি

3

এইচডিএফ 5 একটি "শিফলিং" অ্যালগরিদম ব্যবহার করতে পারে যেখানে এন ফ্লোটিং পয়েন্ট সংখ্যাগুলির বাইটগুলি পুনর্বিন্যাস করা হয় যাতে এন সংখ্যার প্রথম বাইটগুলি প্রথমে আসে, তারপরে ২ য় এবং আরও অনেক কিছু রয়েছে। জিজিপ প্রয়োগের পরে এটি আরও ভাল সংক্ষেপণ অনুপাত তৈরি করে, কারণ এটি একই মানের দীর্ঘতর ক্রম উত্পাদন করার সম্ভাবনা বেশি। কিছু মানদণ্ডের জন্য এখানে দেখুন ।


1

এসজেড (২০১ 2016 সালে আর্গোন্ন দ্বারা বিকাশিত) একটি ভাল পছন্দ হতে পারে।

এসজেড: বৈজ্ঞানিক অ্যাপ্লিকেশনগুলির জন্য দ্রুত ত্রুটি-সীমাবদ্ধ ফ্লোটিং পয়েন্ট ডেটা সংক্ষেপক https://collab.cels.anl.gov/display/ESR/SZ


কেন আপনি মনে করেন এটি একটি ভাল পছন্দ হতে পারে? অন্যান্য সংক্ষেপণের কৌশলগুলির তুলনায় এর ক্ষমতাগুলি কী কী?
পল

1

সম্ভাব্য পদ্ধতিগুলি, যা ভাসমান-পয়েন্ট সংকোচনের জন্য ব্যবহার করা যেতে পারে:

  • ডাবল + lz77 এর জন্য ভাসমানের জন্য 4xN এবং 8xN রূপান্তর করুন
    বাস্তবায়ন: টার্বো ট্রান্সপাসে ভাসমান বিন্দু সংকোচন
    এছাড়াও ত্রুটি-সীমাবদ্ধ ক্ষতির সংকোচন দেখুন

  • ভবিষ্যদ্বাণীকারী (প্রাক্তন সীমাবদ্ধ প্রসঙ্গ পদ্ধতি) + এনকোডিং (প্রাক্তন "পূর্ণসংখ্যার সংক্ষেপণ")।
    বাস্তবায়ন: সময় সিরিজের জন্য বিশেষ সংক্ষেপণ
    সহ টার্বোপোপে ফ্লোটিং পয়েন্ট সংক্ষেপণ

  • যখন সম্ভব হবে, সমস্ত ভাসমান পয়েন্ট সংখ্যাগুলিকে পূর্ণসংখ্যায় রূপান্তর করুন (উদাঃ 1.63 -> 163), তারপরে পূর্ণসংখ্যার সংক্ষেপণটি ব্যবহার করুন

  • আপনি লিনাক্স এবং উইন্ডোজের জন্য আইক্যাপ সরঞ্জামটি ব্যবহার করে আপনার ডেটা দিয়ে এই সমস্ত পদ্ধতি পরীক্ষা করতে পারেন ।


1

আমরা আমাদের মেডিকেল ইমেজিং ডেটার জন্য এইচডিএফ 5 এর সাথে জেডএফপি ব্যবহার করছি । এটি ক্ষতিকারক, ভাসমান পয়েন্ট সংকোচনের জন্য তৈরি।

আমরা এটি আক্ষরিকভাবে সমস্ত কিছুতে চালিয়ে যাচ্ছি, এবং 40 টিবিবি'রও বেশি ডেটা সঞ্চয় করা আছে (এবং ব্যবহৃত হচ্ছে!) আমাদের ডেটা রিয়েল-টাইম সংরক্ষণ করার জন্য এটি যথেষ্ট দ্রুত, এবং আমরা প্রয়োজনীয় নির্ভুলতা নির্দিষ্ট করতে পারি, সুতরাং ফর্ম্যাটটি ক্ষয়ক্ষতি থাকা অবস্থায় আমরা আমাদের চূড়ান্ত ফলাফলগুলির মধ্যে কোনও পার্থক্য দেখছি না।


0

যদি কোনও ফাংশন মসৃণ হয় তবে স্পষ্টতই সেই ফাংশনের প্রতিনিধিত্বকারী সংখ্যার মধ্যে অনেকগুলি পারস্পরিক সম্পর্ক রয়েছে, সুতরাং ডেটাটি ভালভাবে সংকোচিত হওয়া উচিত।

সম্ভবত আপনার যে বিন্যাসের প্রয়োজন হবে সেটির জন্য কেবল অফসেটগুলি মান থেকে প্রতিবেশী মানতে সঞ্চয় করতে হবে।

পর্যায়ক্রমে, আপনি সম্ভবত ফ্রিকোয়েন্সি ডোমেন ব্যবহার করতে পারেন, এমনকি "ফ্ল্যাক লসলেস" এর মতো একটি অবিচ্ছিন্ন অডিও ফাইল হিসাবে এই মানগুলি সংরক্ষণ করতে পারেন, কারণ আপনার কোনও শব্দটির জন্য একই বৈশিষ্ট্যের কিছু দরকার।

যাইহোক, আমি যে প্রশ্নটি কিছুটা সহায়ক হতে পারে আশা করি তার উত্তর দেওয়ার চেষ্টা করার জন্য আমি একটি ভিন্ন পদ্ধতি গ্রহণ করতে যাচ্ছি। আপনি যা বলছেন তা হ'ল এই ডেটা উপস্থাপনের জন্য ন্যূনতম বর্ণনার দৈর্ঘ্য সমস্ত ডেটা পয়েন্ট সরবরাহ করার চেয়ে কম।

https://en.wikipedia.org/wiki/Minimum_description_length

কার্যকরভাবে একটি প্রোগ্রাম, কম্পিউটার কোড, একটি ভাল উদাহরণ। এবং যদি আপনি কিছু মনে করেন না যে কিছুটা প্রাথমিকভাবে নির্বাহের মাধ্যমে ডেটা কাজ করে এবং তাই কোডও হয়ে থাকে তবে আপনি আপনার ভাসমান পয়েন্টের মানগুলি একটি ফাংশন বা ফর্মুলির মতো সংমিশ্রণে সংকুচিত করতে পারেন।

এটি বিশেষত স্বয়ংক্রিয়ভাবে এবং গণনার পরিমাণে বাস্তবসম্মতভাবে করা খুব শক্ত। তবে ওল্ফ্রাম ভাষা এটির চেষ্টা করার জন্য কিছু কার্যকারিতা সরবরাহ করে:

https://references.wolfram.com/language/ref/FindSequenceFunction.html https://references.wolfram.com/language/ref/FindGeneratingFunction.html https://references.wolfram.com/language/ref/FindFormula। এইচটিএমএল

https://reference.wolfram.com/language/ref/RSolve.html


0

কেন শুধু ফ্লোট 32 / ফ্লোট 16 সংরক্ষণ করবেন না? অদ্ভুত,

A.astype( np.float32 )  # 100M: 200 msec imac
A.astype( np.float16 )  # 100M: 700 msec

আপনি যদি বিশৃঙ্খলা তত্ত্বে প্রজাপতি প্রভাব সিমুলেট করছেন তবে এটিগুলি করবে না , তবে তারা বোধগম্য, পোর্টেবল, "আমার পক্ষ থেকে কোনও কাজের প্রয়োজন হবে না"। এবং সংক্রমণ 2: 1/4: 1 ওভার ফ্লোট 64 হারাতে কঠিন)

নোট:

"অ্যারে টাইপ ফ্লোট 16 এনপি.লিনালগে অসমর্থিত"; এটি পড়ার পরে আপনাকে এটিকে 32 বা 64-এ প্রসারিত করতে হবে।

ভাসমান-পয়েন্ট পরামিতিগুলি কীভাবে পৃথক হয় তা দেখতে,

import numpy as np
for f in [np.float64, np.float32, np.float16]:
    print np.finfo(f)

তুচ্ছ পরীক্ষা মামলার প্লটের জন্য ফ্লোট 64 32 এবং 16 এর তুলনা করুন, এখানে দেখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.