मेरे पर यह है:

import numpy as np

mol= np.array([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19], [20], [21], [22], [23], [24], [25], [26], [27]])
i = np.where(mol == 7)
print(i)

लेकिन यह वापसी है

(array([], dtype=int64),)

इसके अलावा, अगर मैं करता हूँ

i = np.where(mol == 7)

यह वही वापसी है

समस्या क्या है? शुक्रिया!

2
Dmitry Proshutinski 23 जून 2018, 18:13

1 उत्तर

सबसे बढ़िया उत्तर

जब आप जंजीर सूचियों के साथ एक numpy सरणी बनाते हैं, तो परिणामी numpy array dtype object की होगी और इसमें सूचियां होंगी।

>>> x = np.array([[1], [1,2]])
>>> x
array([list([1]), list([1, 2])], dtype=object)

आप अपनी इनपुट सूची के साथ समान परिणाम स्पष्ट रूप से देख सकते हैं:

array([list([0, 1, 2, 3, 4]), list([5, 6, 7, 8, 9]),
       list([10, 11, 12, 13, 14]), list([15, 16, 17, 18, 19]), list([20]),
       list([21]), list([22]), list([23]), list([24]), list([25]),
       list([26]), list([27])], dtype=object)

यही कारण है कि np.where को आपके मान नहीं मिलते, आप np.where का उपयोग करके सूचियां नहीं खोज सकते। इसकी तुलना एक गैर-दांतेदार सरणी से करें जिसमें lists शामिल नहीं है:

x = np.arange(28).reshape(7, -1)

In [21]: np.where(x==7)
Out[21]: (array([1]), array([3]))

यदि आप इसके आसपास जाना चाहते हैं, तो आप या तो दांतेदार सरणियों का उपयोग नहीं कर सकते हैं, जो आमतौर पर वैसे भी एक परेशानी है, या आप अपने सरणी को -1 जैसी किसी चीज़ से पैड कर सकते हैं:

top = max([len(i) for i in mol])
mol = np.asarray([np.pad(i, (0, top-len(i)), 'constant', constant_values=-1) for i in mol])

array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, -1, -1, -1, -1],
       [21, -1, -1, -1, -1],
       [22, -1, -1, -1, -1],
       [23, -1, -1, -1, -1],
       [24, -1, -1, -1, -1],
       [25, -1, -1, -1, -1],
       [26, -1, -1, -1, -1],
       [27, -1, -1, -1, -1]])

जो आपको np.where . का पुन: उपयोग करने में सक्षम बनाएगा

In [40]: np.where(mol==7)
Out[40]: (array([1]), array([2]))
2
user3483203 23 जून 2018, 18:29