<p>numpy.concat प्रसारण अक्षों पर काम नहीं करता है (Trac # 1518)</p>

को निर्मित 19 अक्तू॰ 2012  ·  11टिप्पणियाँ  ·  स्रोत: numpy/numpy

_ऑरिजिनल टिकट http://projects.scipy.org/numpy/ticket/1518 2010-06-22 को trac user eob द्वारा, अज्ञात को सौंपा गया ।_

जब मैं दो टेनसरों को एक साथ जोड़ने की कोशिश कर रहा हूं, तो कॉन्टेनेट ऑपरेशन मुझे उनमें से एक में प्रसारण आयाम (newaxis का उपयोग करके) का उपयोग करने की अनुमति नहीं देता है।

00 - Bug Other

सबसे उपयोगी टिप्पणी

मुझे एक समाधान मिला जो मुझे ठोस लगता है ... बस np.concatenate(np.broadcast_arrays(*arrays), axis=...) के रूप में ब्रॉडकास्ट_रेज़ का उपयोग करें। Ex: np.concatenate(np.broadcast_arrays(0, [1, 2], [[3, 4], [5, 6]]), axis=1)array([[0, 0, 1, 2, 3, 4], [0, 0, 1, 2, 5, 6]])

सभी 11 टिप्पणियाँ

_trac यूजर ईओबी ने 2010-06-22_ पर लिखा

नोट: हम जिस वर्कअराउंड का उपयोग कर रहे हैं, वह numpy.array को टाइल करना है जिसे हम newaxis का उपयोग करना चाहते थे, जो काम करता है लेकिन मेमोरी की कीमत पर।

_ @ pv ने 2010-06-24_ पर लिखा

क्या आप उदाहरण कोड का एक स्व-निहित टुकड़ा लिख ​​सकते हैं जो यह दिखा रहा है कि आप क्या करने की कोशिश कर रहे हैं, आप क्या करना चाहते हैं और वास्तव में क्या होता है।

आपके विवरण से, यह मेरे लिए पूरी तरह से स्पष्ट नहीं है कि आप चीजों को कैसे काम करना चाहते हैं।

_ @ pv ने 2010-06-24_ पर लिखा

यदि आप यह मतलब है,

>>> x = np.array([1,2,3,4])
>>> y = np.array([[1,2],[3,4],[5,6],[7,8]])
>>> np.concatenate((y, np.tile(x, (4,1))), axis=1)
array([[1, 2, 1, 2, 3, 4],
       [3, 4, 1, 2, 3, 4],
       [5, 6, 1, 2, 3, 4],
       [7, 8, 1, 2, 3, 4]])

आप इसे प्रतियां के बिना कर सकते हैं:

def broadcast_view(x, ref):
    """Broadcast unit dimensions in `x` to match those in `ref` without copies"""
    strides = [0 if x.shape[j] == 1 else x.strides[j] for j in range(x.ndim)]
    shape = [ref.shape[j] if x.shape[j] == 1 else x.shape[j] for j in range(x.ndim)]
    from numpy.lib.stride_tricks import as_strided
    return as_strided(x, shape=shape, strides=strides)

>>> x = np.array([1,2,3,4])
>>> y = np.array([[1,2],[3,4],[5,6],[7,8]])
>>> np.concatenate((y, broadcast_view(x[None,:], y)), axis=1)
array([[1, 2, 1, 2, 3, 4],
       [3, 4, 1, 2, 3, 4],
       [5, 6, 1, 2, 3, 4],
       [7, 8, 1, 2, 3, 4]])
>>> broadcast_view(x[None,:], y).base.base.base is x
True

लेकिन हां, मुझे लगता है कि np.concatenate को स्वचालित रूप से ऐसा करना चाहिए।

np.concatenate प्रसारण पर कोई समाचार / प्रगति?

अतीत में सूची पर इस बारे में कुछ चर्चाएं हुई हैं, और सामूहिक ज्ञान ने यह निर्देश दिया कि एक सुस्पष्ट कार्यक्षमता की तुलना में, एक सुरीले संचालन में प्रसारण अनपेक्षित गलतियों को चिह्नित करने की अधिक संभावना थी। हमें शायद इसे बंद कर देना चाहिए।

किसी भी मामले में, यदि आप उस बातचीत को फिर से शुरू करना चाहते हैं, तो सही जगह मेलिंग सूची होगी, यहां नहीं।

क्या इसे "ठीक नहीं होगा" के रूप में बंद किया जाना चाहिए?

माना। ध्यान दें कि मैन्युअल प्रसारण अब थोड़ा आसान है क्योंकि हमारे पास प्रसारण_तक है।

मुझे बस थोड़ा सा सकारात्मक सुदृढीकरण की आवश्यकता थी, इसे बंद कर दिया। यदि किसी के पास इसके खिलाफ एक मजबूत राय है, तो स्वतंत्र महसूस करें।

मुझे एक समाधान मिला जो मुझे ठोस लगता है ... बस np.concatenate(np.broadcast_arrays(*arrays), axis=...) के रूप में ब्रॉडकास्ट_रेज़ का उपयोग करें। Ex: np.concatenate(np.broadcast_arrays(0, [1, 2], [[3, 4], [5, 6]]), axis=1)array([[0, 0, 1, 2, 3, 4], [0, 0, 1, 2, 5, 6]])

@davidmashburn मुझे लगता है कि इस समाधान के साथ एक समस्या है (और सामान्य रूप से इस थ्रेड में दूसरों द्वारा सुझाए गए मैनुअल प्रसारण के साथ)। मुझे नहीं लगता कि यह उस आयाम में प्रसारित करने के लिए समझ में आता है जिसमें हम सहमति देते हैं। दूसरे शब्दों में, आपके मामले में मैं केवल शून्य के एक कॉलम के साथ समाप्त होने की उम्मीद करूंगा।

यदि कोई अन्य व्यक्ति भी इस समस्या को पाता है, तो समवर्ती में प्रसारण के समाधान की खोज करते हुए, मैंने अपना समाधान https://stackoverflow.com/questions/56357047/concatenate-with-broadcast/6n61019#61061019 पर पोस्ट किया।

क्या यह पृष्ठ उपयोगी था?
0 / 5 - 0 रेटिंग्स