নম্পির অ্যারে () এবং আসারে () ফাংশনগুলির মধ্যে পার্থক্য কী?


297

নম্পি array()এবং asarray()ফাংশনগুলির মধ্যে পার্থক্য কী ? আপনি কখন অন্যটির চেয়ে একটি ব্যবহার করবেন? তারা ভাবতে পারে এমন সমস্ত ইনপুটগুলির জন্য অভিন্ন আউটপুট উত্পন্ন বলে মনে হচ্ছে।

উত্তর:


110

যেহেতু অন্যান্য প্রশ্নগুলি এই সম্পর্কে জিজ্ঞাসা করা হয় asanyarrayবা অন্য অ্যারে তৈরির রুটিনগুলিতে পুনর্নির্দেশ করা হচ্ছে , তাই তাদের প্রতিটি কি করে তার সংক্ষিপ্ত সংক্ষিপ্ত বিবরণ যুক্তিযুক্ত সম্ভবত worth

অনুলিপিগুলি মূলত কপির হিসাবে নতুন অ্যারে তৈরি করার বিরোধী হিসাবে ইনপুটটি অপরিবর্তিত অবস্থায় ফিরিয়ে আনতে হবে about

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

ধরুন aএকটি ndarray, এবং mএটি একটি matrixএবং তাদের উভয়ের একটির dtypeরয়েছে float32:

  • np.array(a)এবং np.array(m)উভয়ই অনুলিপি করবে, কারণ এটি পূর্বনির্ধারিত আচরণ।
  • np.array(a, copy=False)এবং np.array(m, copy=False)অনুলিপি করবে mকিন্তু না a, কারণ mএটি একটি নয় ndarray
  • np.array(a, copy=False, subok=True)এবং np.array(m, copy=False, subok=True)কোনওটি অনুলিপি করবে না, কারণ mএটি একটি matrix, যা একটি সাবক্লাস ndarray
  • np.array(a, dtype=int, copy=False, subok=True)উভয়ই অনুলিপি করবে, কারণ এটি dtypeউপযুক্ত নয়।

arrayঅনুলিপি ঘটে যখন অন্যান্য ফাংশনগুলির বেশিরভাগটি নিয়ন্ত্রণের চারপাশে পাতলা মোড়ক থাকে:

  • asarray: ইনপুট uncopied ফেরত পাঠানো হবে iff এটি একটি সামঞ্জস্যপূর্ণ ndarray( copy=False)।
  • asanyarray: ইনপুট uncopied ফেরত পাঠানো হবে iff এটি একটি সামঞ্জস্যপূর্ণ ndarrayবা মত উপশ্রেণী matrix( copy=False, subok=True)।
  • ascontiguousarray: যদি এটি ndarrayসি এর সাথে সামঞ্জস্যপূর্ণ উপযুক্ত হয় ( copy=False, order='C')
  • asfortranarray: ইনপুটটি অনির্ধারিতভাবে ফিরিয়ে দেওয়া হবে যদি এটি ফোর্ট্রান ক্রমাগত ndarrayঅর্ডার ( copy=False, order='F') এর সাথে সামঞ্জস্যপূর্ণ ।
  • require: যদি ইনপুটটি নির্দিষ্ট প্রয়োজনীয়তার স্ট্রিংয়ের সাথে সামঞ্জস্য হয় তবে তা অনাবৃত ফিরে আসবে।
  • copy: ইনপুটটি সর্বদা অনুলিপি করা হয়।
  • fromiter: ইনপুটটিকে পুনরাবৃত্ত হিসাবে বিবেচনা করা হয় (সুতরাং, যেমন, আপনি পুনরাবৃত্তকারীগুলির objectসাথে অ্যারের পরিবর্তে পুনরাবৃত্তকারীগুলির উপাদানগুলি থেকে অ্যারে তৈরি করতে পারেন ); সর্বদা অনুলিপি করা।

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


এর জন্য ধন্যবাদ, এটি খুব সহায়ক
ক্রিস

234

এর সংজ্ঞাটিasarray হ'ল:

def asarray(a, dtype=None, order=None):
    return array(a, dtype, copy=False, order=order)

সুতরাং এটির মতো arrayএটির চেয়ে কম বিকল্প রয়েছে এবং copy=Falsearrayহয়েছে copy=Trueডিফল্টরূপে।

মূল পার্থক্য হ'ল array(ডিফল্টরূপে) অবজেক্টের একটি অনুলিপি তৈরি asarrayকরবে , যখন না প্রয়োজন হবে না।


13
সুতরাং আমরা যখন প্রতিটি ব্যবহার করা উচিত? যদি স্ক্র্যাচ থেকে একটি অ্যারে তৈরি করা হয় তবে কোনটি ভাল, array([1, 2, 3])বা asarray([1, 2, 3])?
এন্ডোলিথ

15
@endolith: [1, 2, 3]একটি পাইথন তালিকা, সুতরাং ডেটা তৈরি করার জন্য অবশ্যই অনুলিপি তৈরি করতে হবে ndarary। সুতরাং এর np.arrayপরিবর্তে সরাসরি ব্যবহার করুন np.asarrayযা copy=Falseপ্যারামিটারটি প্রেরণ করবে np.arraycopy=Falseযদি একটি কপি যেমন এই ক্ষেত্রে হবে তৈরি করা আবশ্যক উপেক্ষা করা হয়। আপনি যদি %timeitআইপিথনে দুটি ব্যবহার করে বেঞ্চমার্ক করেন আপনি ছোট তালিকার জন্য একটি পার্থক্য দেখতে পাবেন, তবে আপনি বড় তালিকার জন্য যা ব্যবহার করেন তা খুব কমই গুরুত্বপূর্ণ ly
unutbu

3
এটি পদ্ধতির নামগুলি অনুসারেও বোধগম্য হয়: "আসার্য": এটি অ্যারে (অন্তর্নিহিত) হিসাবে বিবেচনা করুন, অর্থাত্, আপনি এই তালিকা / অ্যারেতে কেবল নিজের দৃষ্টিভঙ্গি সাজানোর চেষ্টা করছেন। "অ্যারে": আসলে এটিকে একটি নতুন অ্যারেতে রূপান্তর করুন।
দিনভার

1
কীভাবে np.asanyarray?
লি

3
@ লী: asarrayসর্বদা একটি ফেরত দেয় ndarrayasanyarrayএটি ndarrayযদি এটি পাস করা হয় তবে একটি সাবক্লাস ফেরত দেবে । উদাহরণস্বরূপ, একটি np.matrixহল একটি সাবক্লাস ndarray। সুতরাং np.asanyarray(np.matrix(...))একই ম্যাট্রিক্স প্রদান করে, যেখানে ম্যাট্রিক্সকে একটিতে np.asarray(np.matrix(...))রূপান্তরিত করা হয় ndarray
unutbu

113

পার্থক্যটি এই উদাহরণ দ্বারা প্রদর্শিত হতে পারে:

  1. একটি ম্যাট্রিক্স উত্পন্ন

    >>> A = numpy.matrix(numpy.ones((3,3)))
    >>> A
    matrix([[ 1.,  1.,  1.],
            [ 1.,  1.,  1.],
            [ 1.,  1.,  1.]])
    
  2. numpy.arrayপরিবর্তন করতে ব্যবহার করুন A। আপনি কোনও অনুলিপি পরিবর্তন করছেন বলে কাজ করে না

    >>> numpy.array(A)[2]=2
    >>> A
    matrix([[ 1.,  1.,  1.],
            [ 1.,  1.,  1.],
            [ 1.,  1.,  1.]])
    
  3. numpy.asarrayপরিবর্তন করতে ব্যবহার করুন A। এটা কাজ কারণ আপনার পরিবর্তন হয় Aনিজেই

    >>> numpy.asarray(A)[2]=2
    >>> A
    matrix([[ 1.,  1.,  1.],
            [ 1.,  1.,  1.],
            [ 2.,  2.,  2.]])
    

আশাকরি এটা সাহায্য করবে!


13

পার্থক্যগুলির ডকুমেন্টেশনে arrayএবং স্পষ্টভাবে উল্লেখ করা হয়েছে asarray। পার্থক্যগুলি আর্গুমেন্ট তালিকায় থাকে এবং সুতরাং সেই পরামিতিগুলির উপর নির্ভর করে ফাংশনের ক্রিয়া।

ফাংশন সংজ্ঞা:

numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)

এবং

numpy.asarray(a, dtype=None, order=None)

নিম্নলিখিত আর্গুমেন্ট ঐ যে প্রেরণ করা হতে পারে arrayএবং না asarray যেমন ডকুমেন্টেশনে উল্লেখ করেছে:

অনুলিপি: বুল, alচ্ছিক যদি সত্য হয় (ডিফল্ট), তবে অবজেক্টটি অনুলিপি করা হয় । অন্যথায়, অনুলিপি কেবল তখনই __array__অনুলিপি করা হয় যখন আপত্তি কোনও নেস্টেড ক্রম হয়, বা অন্য কোনও প্রয়োজনীয়তা (টাইপ, অর্ডার ইত্যাদি) পূরণের জন্য যদি অনুলিপি প্রয়োজন হয়।

সাবোক: বুল, alচ্ছিক যদি সত্য হয় তবে সাব-ক্লাসগুলি পাস করা হবে , অন্যথায় ফিরে আসা অ্যারেটি বেস-ক্লাসের অ্যারে (ডিফল্ট) হতে বাধ্য হবে।

ndmin: int, alচ্ছিক ফলাফল অ্যারে হওয়া উচিত ন্যূনতম মাত্রার পরিমাণ নির্দিষ্ট করে Spec এই প্রয়োজনীয়তাটি পূরণের জন্য প্রয়োজনীয়রা আকারে প্রাক-পেনড করা হবে।


1

এখানে একটি সহজ উদাহরণ যা পার্থক্যটি প্রদর্শন করতে পারে।

মূল পার্থক্যটি হ'ল অ্যারে মূল ডেটার একটি অনুলিপি তৈরি করবে এবং বিভিন্ন বস্তু ব্যবহার করে আমরা মূল অ্যারেতে ডেটা পরিবর্তন করতে পারি।

import numpy as np
a = np.arange(0.0, 10.2, 0.12)
int_cvr = np.asarray(a, dtype = np.int64)

অ্যারে (ক) এর সামগ্রীগুলি অচেনা থেকে যায় এবং তবুও, আমরা মূল অ্যারেতে সামগ্রীটি পরিবর্তন না করে অন্য কোনও অবজেক্ট ব্যবহার করে ডেটাতে যে কোনও ক্রিয়াকলাপ করতে পারি।


0

asarray(x) মত array(x, copy=False)

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

এখানে এমন একটি ফাংশনের উদাহরণ যা নিশ্চিত করে xপ্রথমে অ্যারেতে রূপান্তরিত হয়।

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