मैं मूल रूप से numpy के रीशेप फ़ंक्शन को फिर से बनाने की कोशिश कर रहा हूं। उपयोगकर्ता एक सूची और एक टपल में प्रवेश करता है। टपल मैट्रिक्स के आयाम को तय करता है।

पंक्तियों और स्तंभों को खोजने का मेरा विचार है:

टुपल्स इंडेक्स के पहले या दूसरे तत्व पर इनपुट की गई सूची की लंबाई लें। तो यदि टुपल्स पहला तत्व 3 है तो इसे पहले 3 तत्वों को सरणी के लेन लेना चाहिए।

   def reshape(array: list, rows_columns: tuple):
    
        columns = [len(array(rows_columns[1]))]
    
        rows = [len(array(rows_columns[0]))]
        
        matrix = (rows, columns)
        return matrix
    
   reshape([1, 2, 3, 4], (2, 2))

लेकिन यह संभव नहीं है मुझे TypeError मिलता है: 'सूची' ऑब्जेक्ट कॉल करने योग्य नहीं है। मैं सिर्फ यह जानना चाहता था कि क्या मैं इसके बारे में गलत सोच रहा हूं।

1
pam_param 21 नवम्बर 2020, 17:23

2 जवाब

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

मुझे लगता है कि आपको इसके बारे में ऐसा ही सोचना चाहिए। कोड स्थिरता के लिए सामने वाले तर्कों का थोड़ा सा सत्यापन करता है। यह तब पारित array के माध्यम से लूप करता है जहां प्रत्येक टुकड़ा (एक नई सूची) अगली पंक्ति होगी और जिसका आकार कॉलम चौड़ाई है और उस नई सूची को प्रारंभिक रूप से खाली results सूची में जोड़ा जाता है ( देखें list.append):

def reshape(array: list, rows_columns: tuple):
    l = len(array)
    assert len(rows_columns) == 2
    n_rows = rows_columns[0]
    n_columns = rows_columns[1]
    assert n_rows * n_columns == l
    results = []
    index = 0
    for _ in range(n_rows):
        results.append(array[index:index+n_columns])
        index += n_columns
    return results

print(reshape([1, 2, 3, 4], (2, 2)))
print(reshape([1, 2, 3, 4], (4, 1)))
print(reshape([1, 2, 3, 4], (1, 4)))
print(reshape([1, 2, 3, 4, 5, 6, 7, 8], (4, 2)))

प्रिंट:

[[1, 2], [3, 4]]
[[1], [2], [3], [4]]
[[1, 2, 3, 4]]
[[1, 2], [3, 4], [5, 6], [7, 8]]
2
Booboo 21 नवम्बर 2020, 19:37
import math
import typing as t

def reshape(sequence: t.Sequence, shape: t.Tuple[int, ...]) -> t.Sequence:
    assert len(sequence) == math.prod(shape)
    for n in shape[:-1]:
        sequence = [sequence[i:i + n] for i in range(0, len(sequence), n)]

    return sequence
1
pypae 21 नवम्बर 2020, 18:31