কীভাবে 2D ফ্লোট নম্পি অ্যারে 2D ইন্ট নিম্পি অ্যারে রূপান্তর করবেন?


301

কীভাবে আসল নাম্পার অ্যারেটিকে ইনট নিউপি অ্যারে রূপান্তর করবেন? অ্যারেতে সরাসরি মানচিত্র ব্যবহার করার চেষ্টা করা হয়েছিল কিন্তু এটি কার্যকর হয়নি।

উত্তর:


404

astypeপদ্ধতিটি ব্যবহার করুন ।

>>> x = np.array([[1.0, 2.3], [1.3, 2.9]])
>>> x
array([[ 1. ,  2.3],
       [ 1.3,  2.9]])
>>> x.astype(int)
array([[1, 2],
       [1, 2]])

30
কেবলমাত্র নিশ্চিত হয়ে নিন যে আপনার np.infবা np.nanআপনার অ্যারে নেই, কারণ তাদের বিস্ময়কর ফলাফল রয়েছে। উদাহরণস্বরূপ, np.array([np.inf]).astype(int)আউটপুটস array([-9223372036854775808])
গ্যারেট

আমার মেশিন অন, np.array([np.inf]).astype(int), np.array([-np.inf]).astype(int), এবং np.array([np.nan]).astype(int)সব একই জিনিস ফিরে যান। কেন?
বলপয়েন্টবেন

1
@ বালপয়েন্টপেন: nanএবং infভাসমান-পয়েন্টের মানগুলি হয় এবং অর্থপূর্ণভাবে ইনটে রূপান্তর করা যায় না। আপনার নোটগুলির আগে মন্তব্য হিসাবে, আশ্চর্যজনক আচরণ হবে এবং আমি মনে করি না যে সঠিক আচরণটি সঠিকভাবে সংজ্ঞায়িত হয়েছে। আপনি যদি মানচিত্র nanএবং infনির্দিষ্ট মানগুলিতে যেতে চান তবে আপনার নিজের এটি করতে হবে।
ব্রেণবার্ন

মনে রাখবেন যে x.astype (int) [0] [0] টাইপের নয় int। এটা numpy.int32
ক্রিস অ্যান্ডারসন

নোট করুন যদিও এটি অ্যারেকে ints এ রূপান্তরিত করে, @ fhtuft এর উত্তর যা কম বিস্ময়ের কারণ হতে পারে
নাথান মুসোকে

66

: কিভাবে rounding নিয়ন্ত্রণ করতে জন্য কিছু numpy ফাংশন দ্রণ , মেঝে , TRUNC , ছাদের নিচের পিঠ নির্মাণ । আপনি কীভাবে ভাসমানগুলি, উপরে, নীচে বা নিকটতম ইনটকে বৃত্তাকার করতে চান তা নির্ভর করে।

>>> x = np.array([[1.0,2.3],[1.3,2.9]])
>>> x
array([[ 1. ,  2.3],
       [ 1.3,  2.9]])
>>> y = np.trunc(x)
>>> y
array([[ 1.,  2.],
       [ 1.,  2.]])
>>> z = np.ceil(x)
>>> z
array([[ 1.,  3.],
       [ 2.,  3.]])
>>> t = np.floor(x)
>>> t
array([[ 1.,  2.],
       [ 1.,  2.]])
>>> a = np.rint(x)
>>> a
array([[ 1.,  2.],
       [ 1.,  3.]])

এর মধ্যে একটিতে অন্তর্নিহিত তৈরি করতে, বা অন্য ধরণের বিন্দুগুলির মধ্যে একটি, অ্যাস্টাইপ ( ব্রেনবার্নের উত্তর হিসাবে):

a.astype(int)
array([[1, 2],
       [1, 3]])

>>> y.astype(int)
array([[1, 2],
       [1, 2]])

2
ঠিক আমি খুঁজছেন ছিল কি. astypeপ্রায়শই খুব জেনেরিক হয় এবং আমি মনে করি ইনটেক্স - ইনটি রূপান্তর করার সময় এটি সম্ভবত আরও কার্যকর। আমি যখন ভাসা করতে চাই - ধরণের রূপান্তরটি ধরণের রাউন্ডিং চয়ন করতে সক্ষম হওয়া একটি দুর্দান্ত বৈশিষ্ট্য।
বাকুরিউ

11
নিরাপদে মত প্রায়-একটি ints রূপান্তর করতে সহজ উপায় সুতরাং 7.99999আপনি ints করতে চান 8, হয় np.rint(arr).astype(int)?
এন্ডোলিথ

কোন উপায়ে এটি uint8 করতে?
রায়ান

2
@ রায়ানastype(np.uint8)
ক্রিস অ্যান্ডারসন

14

আপনি ব্যবহার করতে পারেন np.int_:

>>> x = np.array([[1.0, 2.3], [1.3, 2.9]])
>>> x
array([[ 1. ,  2.3],
       [ 1.3,  2.9]])
>>> np.int_(x)
array([[1, 2],
       [1, 2]])

12

তুমি নও নিশ্চিত আপনার ইনপুট একটি Numpy অ্যারে হতে যাচ্ছে, তাহলে আপনি ব্যবহার করতে পারেন asarrayসঙ্গে dtype=intপরিবর্তে astype:

>>> np.asarray([1,2,3,4], dtype=int)
array([1, 2, 3, 4])

যদি ইনপুট অ্যারেটিতে ইতিমধ্যে সঠিক টাইপ থাকে asarrayতবে অ্যারে অনুলিপিটি এড়ানো astypeহয় না (আপনি উল্লেখ না করে copy=False):

>>> a = np.array([1,2,3,4])
>>> a is np.asarray(a)  # no copy :)
True
>>> a is a.astype(int)  # copy :(
False
>>> a is a.astype(int, copy=False)  # no copy :)
True
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.