আমি এটি করার জন্য কয়েকটি সম্ভব পদ্ধতির তুলনা করেছি, যার মধ্যে পান্ডাস, বেশ কয়েকটি ন্যাক্পি পদ্ধতি এবং একটি তালিকা বোঝার পদ্ধতি রয়েছে।
প্রথমে একটি বেসলাইন দিয়ে শুরু করা যাক:
>>> import numpy as np
>>> import operator
>>> import pandas as pd
>>> x = [1, 2, 1, 2]
>>> %time count = np.sum(np.equal(1, x))
>>> print("Count {} using numpy equal with ints".format(count))
CPU times: user 52 µs, sys: 0 ns, total: 52 µs
Wall time: 56 µs
Count 2 using numpy equal with ints
সুতরাং, আমাদের বেসলাইনটি হ'ল গণনাটি সঠিক 2
হওয়া উচিত এবং আমাদের উচিত 50 us
।
এখন, আমরা নিষ্পাপ পদ্ধতিটি চেষ্টা করি:
>>> x = ['s', 'b', 's', 'b']
>>> %time count = np.sum(np.equal('s', x))
>>> print("Count {} using numpy equal".format(count))
CPU times: user 145 µs, sys: 24 µs, total: 169 µs
Wall time: 158 µs
Count NotImplemented using numpy equal
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/ipykernel_launcher.py:1: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
"""Entry point for launching an IPython kernel.
এবং এখানে, আমরা ভুল উত্তর পেয়েছি ( NotImplemented != 2
), এটি আমাদের অনেক সময় নেয় এবং এটি সতর্কতা ছুড়ে দেয়।
সুতরাং আমরা অন্য একটি নিষ্পাপ পদ্ধতি চেষ্টা করব:
>>> %time count = np.sum(x == 's')
>>> print("Count {} using ==".format(count))
CPU times: user 46 µs, sys: 1 µs, total: 47 µs
Wall time: 50.1 µs
Count 0 using ==
আবার, ভুল উত্তর ( 0 != 2
)। এটি আরও বেশি কুখ্যাত কারণ কারণ পরবর্তী কোনও সতর্কতা নেই ( 0
ঠিক এর মতো করে দেওয়া যেতে পারে 2
)।
এখন, আসুন একটি তালিকা বোঝার চেষ্টা করুন:
>>> %time count = np.sum([operator.eq(_x, 's') for _x in x])
>>> print("Count {} using list comprehension".format(count))
CPU times: user 55 µs, sys: 1 µs, total: 56 µs
Wall time: 60.3 µs
Count 2 using list comprehension
আমরা এখানে সঠিক উত্তর পেয়েছি এবং এটি বেশ দ্রুত!
আরেকটি সম্ভাবনা pandas
:
>>> y = pd.Series(x)
>>> %time count = np.sum(y == 's')
>>> print("Count {} using pandas ==".format(count))
CPU times: user 453 µs, sys: 31 µs, total: 484 µs
Wall time: 463 µs
Count 2 using pandas ==
ধীর, তবে সঠিক!
এবং অবশেষে, বিকল্পটি আমি ব্যবহার করতে যাচ্ছি: numpy
অ্যারেটিকে object
টাইপ করুন:
>>> x = np.array(['s', 'b', 's', 'b']).astype(object)
>>> %time count = np.sum(np.equal('s', x))
>>> print("Count {} using numpy equal".format(count))
CPU times: user 50 µs, sys: 1 µs, total: 51 µs
Wall time: 55.1 µs
Count 2 using numpy equal
দ্রুত এবং সঠিক!
thing
(যা একটি নাম্বার ধরণের হতে পারে বা নাও হতে পারে; আমি জানি না) এবং আমি দেখতে চাইthing == 'some string'
এবং একটি সাধারণbool
ফলাফল পেতে চাই তবে আমার কী করা উচিত?np.atleast_1d(thing)[0] == 'some string'
? তবে কিছু জোকারের পক্ষে'some string'
এটি অ্যারের প্রথম উপাদানটি শক্তিশালী নয় । আমি অনুমান করি যে আমাকেthing
প্রথমে প্রকারটি পরীক্ষা করতে হবে এবং তারপরে কেবল এটি==
পরীক্ষা করা উচিত যদি এটি স্ট্রিং (বা কোনও নম্পি অবজেক্ট নয়)।