অ্যারেতে নম্পি ম্যাট্রিক্স


149

আমি ন্যাপি ব্যবহার করছি। আমার 1 টি কলাম এবং এন সারি সহ একটি ম্যাট্রিক্স রয়েছে এবং আমি এন উপাদানগুলির সাথে একটি অ্যারে পেতে চাই।

উদাহরণস্বরূপ, আমার কাছে থাকলে আমি M = matrix([[1], [2], [3], [4]])পেতে চাই A = array([1,2,3,4])

এটি অর্জন করতে, আমি ব্যবহার করি A = np.array(M.T)[0]। কেউ কি একই ফলাফল পেতে আরও মার্জিত উপায় জানেন?

ধন্যবাদ!


উত্তর:


192

আপনি যদি কিছুটা পড়ার মতো কিছু করতে চান তবে আপনি এটি করতে পারেন:

A = np.squeeze(np.asarray(M))

সমানভাবে, আপনি এটি করতেও পারেন: A = np.asarray(M).reshape(-1)তবে এটি পড়ার জন্য কিছুটা কম সহজ।


9
আমার পক্ষ থেকে সামান্য কান্ড এটি এতটাই অপ্রয়োজনীয় আইএমএইচও। এই টিপ @ জো জন্য ধন্যবাদ।
নাইবাবা

6
@ নাইজাবা - এটি যে মূল্যবান তার জন্য ম্যাট্রিক্স শ্রেণি কার্যকরভাবে (তবে আনুষ্ঠানিকভাবে নয়) অবমূল্যায়নযোগ্য। এটি বেশিরভাগ historicalতিহাসিক উদ্দেশ্যেই। অপসারণ numpy.matrixকিছুটা বিতর্কিত ইস্যু, তবে অদ্ভুত দেবগণ আপনার সাথে অনেকটাই একমত যে উভয়টিই পুরোপুরি কারণেই অশুভ এবং বিরক্তিকর। তবে, "বন্যের মধ্যে" পুরানো, অবিরাম কোডের পরিমাণ যা ব্যবহার matrixকরে এটি সম্পূর্ণরূপে মুছে ফেলা কঠিন করে তোলে।
জো কিংটন

1
উল্লেখ করার মতো নয়, সত্য ম্যাট্রিক্স গুণটি কেবল নম্পি 1.10 এ অ্যারেগুলির জন্য যুক্ত হয়েছিল এবং মূলত এখনও বিটাতে রয়েছে। এর অর্থ হ'ল অনেক লোককে (নিজেকে সহ) এখনও আমাদের কাজটি করতে করতে অ্যারের পরিবর্তে ম্যাট্রিক ব্যবহার করতে হবে। docs.scipy.org/doc/numpy/references/generated/numpy.matmul.html
জর্জেস ওটস লারসেন

1
বিরল ম্যাট্রিকগুলি মেমোরি-দক্ষ মেশিন লার্নিংয়ের জন্য মৌলিক (যেমন, sklearn)। আসলে এখানে বিভিন্ন sparse matrixধরণের রয়েছে scipy, যা সারি বা কলামগুলির মাধ্যমে দক্ষ অ্যাক্সেসের অনুমতি দেয়। আমি ভাবছি এটি ম্যাট্রিক্স এবং অ্যারের ধারণাগুলি মার্জ করার জন্য একটি সমস্যা হতে পারে। এটি বলেছিল, আমি ভাবছিলাম যে সেখানেও কোনও sparse arrayপ্রকার চালু করা যেতে পারে এবং এটি করার জন্য কোনও পরিকল্পনা আছে কিনা। কোন সংকেত সনাক্ত করুন?
পিএমএস

আমি মনে করি .ফ্ল্যাটেন () ততক্ষণ .Squeeze () হিসাবে কাজ করে, যতক্ষণ আপনি শেষ পর্যন্ত 1D অ্যারে চান।
শব্দসুখে

122

6
আমি মনে করি এই উত্তর গৃহীত উত্তর, পারফরম্যান্স-ভিত্তিক, এবং সরলতার চেয়ে ভাল
দরিশু

এমএএ 1 দুর্দান্ত, "রেভাল" এবং "ফ্ল্যাটেন" এর সমান বাস্তবায়ন এবং এক্ষেত্রে এ-এর কোনও ডেটা অনুলিপি তৈরি হয় না যা এম এবং এর সাথে যুক্ত থাকে যা এ এবং / বা এম পরিবর্তনযোগ্য হলে আশ্চর্য হতে পারে। এমফ্লাট জেনুইন বিকল্প রিটার্নিং "ফ্ল্যাটার" জেনারেটর (কেবল পঠিত শব্দার্থবিজ্ঞান) এনপি.স্কুয়েজ (এম) # আকার 1 এর মাত্রা অপসারণের একটি ভিউ দেয়, ঠিক আছে এখানে কিন্তু সাধারণ এম এনপি.রেশপের জন্য 1-ডি হওয়ার গ্যারান্টি নেই ( এম, -1) # হ'ল আকৃতি সামঞ্জস্যের উপর নির্ভর করে একটি ভিউ, এই "-1" এ 1 /
রাভেল

13
A, = np.array(M.T)

কমনীয়তার দ্বারা আপনি কী বোঝেন তা নির্ভর করে আমি মনে করি তবে আমি কী করব what


11

আপনি নিম্নলিখিত বৈকল্পিক চেষ্টা করতে পারেন:

result=np.array(M).flatten()

7
np.array(M).ravel()

যদি আপনি গতির যত্ন নেন; তবে আপনি যদি স্মৃতির যত্ন করে থাকেন:

np.asarray(M).ravel()

যদি আপনি ব্যাখ্যা করেন তবে এটি আপনার উত্তরের গুণমানকে উন্নত করতে পারে
মিলো উইলোন্ডেক


2

প্রথমত, Mv = numpy.asarray(M.T)যা আপনাকে একটি 4x1 কিন্তু 2D অ্যারে দেয়।

তারপরে, সম্পাদনা করুন A = Mv[0,:]যা আপনাকে যা চায় তা দেয়। আপনি তাদের একসাথে রাখতে পারে, হিসাবে numpy.asarray(M.T)[0,:]



0

ন্যাপি থেকে রেভেল () এবং সমতল () ফাংশন দুটি কৌশল যা আমি এখানে চেষ্টা করব। আমি জো , সিরাজ , বুদ্বুদ এবং কেভাদের তৈরি পোস্টগুলিতে যুক্ত করতে চাই ।

জটিল করে তোলা:

A = M.ravel()
print A, A.shape
>>> [1 2 3 4] (4,)

চেপ্টা:

M = np.array([[1], [2], [3], [4]])
A = M.flatten()
print A, A.shape
>>> [1 2 3 4] (4,)

numpy.ravel()এটি দ্রুততর , যেহেতু এটি একটি গ্রন্থাগার স্তরের ফাংশন যা অ্যারের কোনও অনুলিপি তৈরি করে না। তবে অ্যারে এ-এর যে কোনও পরিবর্তন আপনি যদি ব্যবহার করছেন তবে তা মূল অ্যারে এম এ নিয়ে যাবেnumpy.ravel()

numpy.flatten()তুলনায় ধীরnumpy.ravel() । তবে আপনি যদি numpy.flatten()এ তৈরি করতে ব্যবহার করছেন তবে এ এর পরিবর্তনগুলি মূল অ্যারে এম তে পৌঁছে যাবে না

numpy.squeeze()এবং M.reshape(-1)তুলনায় ধীর হয় numpy.flatten()এবং numpy.ravel()

%timeit M.ravel()
>>> 1000000 loops, best of 3: 309 ns per loop

%timeit M.flatten()
>>> 1000000 loops, best of 3: 650 ns per loop

%timeit M.reshape(-1)
>>> 1000000 loops, best of 3: 755 ns per loop

%timeit np.squeeze(M)
>>> 1000000 loops, best of 3: 886 ns per loop
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.