ন্যামপি-তে ম্যাটল্যাবের পুনঃনির্মাণের সমতুল্য কী


103

আমি NumPy ব্যবহার করে নিম্নলিখিত ম্যাটল্যাব কোডের সমতুল্য চালানো চাই: repmat([1; 1], [1 1 1])। আমি কীভাবে এটি সম্পাদন করব?

উত্তর:


103

মতলব ব্যবহারকারীদের জন্য এখানে আরও উন্নত (অফিসিয়াল) নম্পপি রয়েছে - আমি ভয় করি ম্যাথেসরাসটি বেশ পুরানো।

এর numpy সমতুল্য repmat(a, m, n)হয় tile(a, (m, n))

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

মতলব:

>> repmat([1;1],[1,1,1])

ans =
     1
     1

পাইথন:

In [46]: a = np.array([[1],[1]])
In [47]: np.tile(a, [1,1,1])
Out[47]: 
array([[[1],
        [1]]])

2
যখন আমি আকারটি চেষ্টা করি (পুনরায় ([1; 1], [1,1,2])) এটি উত্তরগুলি পায় = 2 1 2 [মতলব] তবে পাইথন এনপি.এইচটি (এ, [1,1,2]) এটি পেতে শেপ করুন (1, 2, 2), আমি মতলব হিসাবে মজাদার ফলাফল দিতে চাই
vernomcrp

2
এনপি.টাইল (এ [:, এনপি.নেউক্সিস], [1,1,2]) - এটি একই দেয়। সমস্যাটি হ'ল টাইলটি প্রয়োজনীয় হিসাবে নতুন অক্ষগুলি প্রেরণa করে টাইল যুক্তির মাত্রায় উন্নীত করে । মতলব অন্যভাবে কাজ করছে বলে মনে হচ্ছে। একইভাবে, 4 ডি টাইলিংয়ের সাথে আপনার দু'বার নিউএক্সিসের প্রয়োজন হবে ... সুতরাং প্রয়োজন অনুসারে ...np.tile(a[:,newaxis,newaxis],[1,2,3,4]) = size(repmat(a,[1 2 3 4]))
রবিন্স

17

নোট করুন যে আপনাকে ম্যাটল্যাবের পুনঃনির্মাণ ব্যবহার করার প্রয়োজনের কয়েকটি কারণ নুমপির সম্প্রচার প্রক্রিয়া দ্বারা যত্ন নেওয়া হয়েছে , যা আপনাকে অনুরূপ আকারের অ্যারে সহ বিভিন্ন ধরণের গণিত করতে দেয়। সুতরাং, যদি বলুন, একটি 1600x1400x3 অ্যারে 3-রঙের চিত্রকে উপস্থাপন করে, আপনি প্রতিটি উপাদানকে [1.0 0.25 0.25]সবুজ এবং নীল পরিমাণ হ্রাস করে (মৌলিক দিকের) দ্বারা এটির গুণ করতে পারেন। আরও তথ্যের জন্য উপরের লিঙ্কটি দেখুন।


2
আপনি যদি ব্যবহার করেন তবে মতলবও এই সম্প্রচারটি করতে পারবেন না bsxfun
Gerrit


8

চারপাশে বিড়বিড় হয়ে আমি এইভাবে বুঝলাম। সংশোধন করার জন্য খুশি এবং আশা করি এটি সাহায্য করবে।

বলুন আপনার কাছে 2x3 উপাদানগুলির একটি ম্যাট্রিক্স এম রয়েছে। স্পষ্টতই এর দুটি মাত্রা রয়েছে।


ইতিমধ্যে ম্যাট্রিক্সের মাত্রাগুলির সাথে ইনপুট ম্যাট্রিক্সটি পরিচালনা করতে বলার সময় আমি মাতলাব এবং পাইথনের মধ্যে কোনও পার্থক্য দেখতে পেলাম না। এইভাবে দুটি আদেশ

repmat(M,m,n) % matlab

np.tile(M,(m,n)) # python

র‌্যাঙ্ক 2 (দুটি মাত্রা) এর ম্যাট্রিক্সের জন্য সত্যই সমতুল্য।


আপনি যখন ইনপুট ম্যাট্রিক্সের চেয়ে বেশি মাত্রায় পুনরাবৃত্তি / টাইলিংয়ের কথা বলেন তখন বিষয়গুলি স্ব-স্বজ্ঞাত হয়। র‌্যাঙ্ক টু এবং মাপ 2x3 এর ম্যাট্রিক্স এম এ ফিরে যাওয়া, আউটপুট ম্যাট্রিক্সের আকার / আকারের কি হবে তা দেখার পক্ষে যথেষ্ট। ম্যানিপুলেশন জন্য ক্রম এখন 1,1,2 বলুন।

মতলব-এ

> size(repmat(M,1,1,2))
ans =

    2   3   2

এটি ইনপুট ম্যাট্রিক্সের প্রথম দুটি মাত্রা (সারি এবং কলাম) অনুলিপি করেছে এবং পুনরাবৃত্তি করেছে যে এটি একবার নতুন তৃতীয় মাত্রায় (দ্বিগুণ অনুলিপি করা হয়েছে)। নামকরণে সত্যrepmatপুনরাবৃত্তি ম্যাট্রিক্সের ।

পাইথনে

>>> np.tile(M,(1,1,2)).shape
(1, 2, 6)

আমার ধারণা থেকে এটি একটি আলাদা পদ্ধতি প্রয়োগ করেছে, অনুক্রমটি (1,1,2) মতলবের চেয়ে আলাদাভাবে পড়েছে। কলাম, সারি এবং বিমানের বহিরাগত দিকের দিকের কপির সংখ্যা ডান থেকে বামে পঠিত হচ্ছে। ফলস্বরূপ বস্তুর মতলব থেকে আলাদা আকৃতি রয়েছে। এটি আর দৃ as়ভাবে বিবেচনা করতে পারে না repmatএবং tileএটি সমতুল্য নির্দেশাবলী।


পাইথনের tileমতো আচরণ করতে পেতে repmat, একটিটিকে নিশ্চিত করতে হবে যে উপাদানগুলি ক্রম অনুসারে ইনপুট ম্যাট্রিক্সের যতগুলি মাত্রা রয়েছে। এই কাজ করা হয়, উদাহরণস্বরূপ, একটু preconditioning দ্বারা এবং একটি সম্পর্কিত বস্তুর তৈরি এন

N = M[:,:,np.newaxis]

তারপরে, ইনপুট দিকে একটির N.shape = (2,3,1)পরিবর্তে M.shape = (2,3)এবং আউটপুট দিকে থাকে

>>> np.tile(N,(1,1,2)).shape
(2, 3, 2)

যা এর উত্তর ছিল size(repmat(M,1,1,2))। আমি অনুমান করি এটি কারণ আমরা পাইথনকে তার বামের চেয়ে ডানদিকে (২,৩) ডানদিকে তৃতীয় মাত্রা যুক্ত করতে নির্দেশিত করেছি, যাতে মাতলাব অনুসারে পাইথনটি ক্রমটি (১,১,২) তৈরি করে এটি পড়ার উপায়।

উপাদান [:,:,0]জন্য পাইথন উত্তরে এন উপাদান হিসাবে একই মান থাকতে হবে (:,:,1)জন্য মতলব উত্তর এম


অবশেষে, repmatযখন কেউ ক্রোনেকার পণ্য ব্যবহার করে তখন এর সমতুল্য খুঁজে পাচ্ছি না

>>> np.kron(np.ones((1,1,2)),M).shape
(1, 2, 6)

যদি না আমি তখন পূর্বশর্ত এম মধ্যে এন উপরে হিসাবে। সুতরাং আমি তর্ক করব যে এগিয়ে যাওয়ার সর্বাধিক সাধারণ উপায় হল উপায়গুলি ব্যবহার করা np.newaxis


গেমটি তত্পর হয়ে যায় যখন আমরা ম্যাট্রিক্স এল এর র‌্যাঙ্ক 3 (তিন মাত্রা) বিবেচনা করি এবং আউটপুট ম্যাট্রিক্সে কোনও নতুন মাত্রা যুক্ত না হওয়ার সহজ ক্ষেত্রে। এই দুটি আপাতদৃষ্টিতে সমতুল্য নির্দেশাবলী একই ফলাফল তৈরি করবে না

repmat(L,p,q,r) % matlab

np.tile(L,(p,q,r)) # python

কারণ সারি, কলাম, বিমানের বহির্ভূত দিকনির্দেশগুলি (পি, কিউ, আর) মতলব এবং পাইথনে (কিউ, আর, পি) রয়েছে, যা র‌্যাঙ্ক -২ অ্যারে দ্বারা দৃশ্যমান ছিল না। সেখানে একজনকে সতর্ক হতে হবে এবং দুটি ভাষার সাথে একই ফলাফল অর্জন করতে আরও পূর্বশর্ত প্রয়োজন require


আমি সচেতন যে এই যুক্তিটি সাধারণ নাও হতে পারে তবে আমি কেবল এটিকেই কাজ করতে পারি। আশা করি এটি আরও কঠোর পরীক্ষার জন্য অন্য ফেলোদের আমন্ত্রণ জানিয়েছে।



1

numpy.matlib টি repmat মতলব ফাংশন হিসাবে একটি অনুরূপ ইন্টারফেসের সাথে ফাংশন

from numpy.matlib import repmat
repmat( np.array([[1],[1]]) , 1, 1)

0
>>> import numpy as np

>>> np.repeat(['a','b'], [2,5])

array(['a', 'a', 'b', 'b', 'b', 'b', 'b'], dtype='<U1')

>>> np.repeat([1,2], [2,5])

array([1, 1, 2, 2, 2, 2, 2])

>>> np.repeat(np.array([1,2]), [3]).reshape(2,3)

array([[1, 1, 1],
       [2, 2, 2]])

>>> np.repeat(np.array([1,2]), [2,4]).reshape(3,2)

array([[1, 1],
       [2, 2],
       [2, 2]])

>>> np.repeat(np.matrix('1 2; 3 4'), [2]).reshape(4,2)

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