आपकी समस्या वास्तव में आकार 1 की सूची के बारे में नहीं है, यह सूची एक ही आकार के बारे में सब है। मैं इस डमी नमूने बनाया है: हम इन तीन पर अपने कोड चलाते हैं
ax2_cid = np.random.rand(10)
shape = (10, 3)
x2_Kaxs = np.empty((10, 3), dtype=object).reshape(-1)
for j in xrange(x2_Kaxs.size):
x2_Kaxs[j] = [random.randint(0, 9) for k in xrange(random.randint(1, 5))]
x2_Kaxs.shape = shape
x2_Kaxs_1 = np.empty((10, 3), dtype=object).reshape(-1)
for j in xrange(x2_Kaxs.size):
x2_Kaxs_1[j] = [random.randint(0, 9)]
x2_Kaxs_1.shape = shape
x2_Kaxs_2 = np.empty((10, 3), dtype=object).reshape(-1)
for j in xrange(x2_Kaxs_2.size):
x2_Kaxs_2[j] = [random.randint(0, 9) for k in xrange(2)]
x2_Kaxs_2.shape = shape
, वापसी निम्नलिखित आकार है:
>>> np.array([ax2_cid[axs] for axs in x2_Kaxs.flat], dtype=object).shape
(30,)
>>> np.array([ax2_cid[axs] for axs in x2_Kaxs_1.flat], dtype=object).shape
(30, 1)
>>> np.array([ax2_cid[axs] for axs in x2_Kaxs_2.flat], dtype=object).shape
(30, 2)
और लंबाई 2 की सभी सूचियों के साथ मामला भी नहीं होगा आपको (n, 3)
पर दोबारा बदलने दें। समस्या यह है कि, dtype=object
के साथ भी, numpy को जितना संभव हो सके उतना इनपुट करने की कोशिश करता है, जो अलग-अलग तत्वों के नीचे है, यदि सभी सूचियां समान लंबाई के हैं। मुझे लगता है कि आपका सर्वश्रेष्ठ दांव अपने x2_Kcids
सरणी preallocate के लिए है:
x2_Kcids = np.empty_like(x2_Kaxs).reshape(-1)
shape = x2_Kaxs.shape
x2_Kcids[:] = [ax2_cid[axs] for axs in x2_Kaxs.flat]
x2_Kcids.shape = shape
संपादित के बाद से unubtu का जवाब नहीं दिखाई देगा, मैं उसे से चोरी करने जा रहा हूँ। कोड ऊपर और अधिक अच्छी तरह से और दृढ़तापूर्वक लिखा जा सकता है के रूप में:
x2_Kcids = np.empty_like(x2_Kaxs)
x2_Kcids.ravel()[:] = [ax2_cid[axs] for axs in x2_Kaxs.flat]
एक आइटम की सूची के ऊपर के उदाहरण के साथ
:
>>> x2_Kcids_1 = np.empty_like(x2_Kaxs_1).reshape(-1)
>>> x2_Kcids_1[:] = [ax2_cid[axs] for axs in x2_Kaxs_1.flat]
>>> x2_Kcids_1.shape = shape
>>> x2_Kcids_1
array([[[ 0.37685372], [ 0.95328117], [ 0.63840868]],
[[ 0.43009678], [ 0.02069558], [ 0.32455781]],
[[ 0.32455781], [ 0.37685372], [ 0.09777559]],
[[ 0.09777559], [ 0.37685372], [ 0.32455781]],
[[ 0.02069558], [ 0.02069558], [ 0.43009678]],
[[ 0.32455781], [ 0.63840868], [ 0.37685372]],
[[ 0.63840868], [ 0.43009678], [ 0.25532799]],
[[ 0.02069558], [ 0.32455781], [ 0.09777559]],
[[ 0.43009678], [ 0.37685372], [ 0.63840868]],
[[ 0.02069558], [ 0.17876822], [ 0.17876822]]], dtype=object)
>>> x2_Kcids_1[0, 0]
array([ 0.37685372])
@unubtu चूंकि आप अपने उत्तर हटा दिया गया है, मैं बेशर्म की नकल की है मेरे जवाब में एक संपादन में आपके flattened-array-on-the-left-of-असाइनमेंट। '.ravel() 'के साथ जाना था, हालांकि' .flat' अजीब परिणाम दे रहा था। – Jaime