2009-08-07 13 views
11

ठीक है, कल्पना करें कि मेरे पास यह मैट्रिक्स है: {{1,2}, {2,3}}, और मेरे पास {{4,1,2}, {5,2,3}} होगा। यही है, मैंने मैट्रिक्स में एक कॉलम तैयार किया। क्या ऐसा करने का कोई आसान तरीका है?एक मैट्रिक्स में कॉलम कैसे प्रीपेड करें?

मेरे सबसे अच्छा प्रस्ताव यह है:

PrependColumn[vector_List, matrix_List] := 
Outer[Prepend[#1, #2] &, matrix, vector, 1] 

लेकिन यह कोड obfuscates और लगातार की आवश्यकता है और अधिक से अधिक कोड लोड हो रहा है। क्या यह किसी भी तरह से बनाया गया है?

उत्तर

11

ArrayFlatten के बाद से मेथेमेटिका 6 में पेश किया गया था कम से कम समझ से परे समाधान होना चाहिए

matrix = {{1, 2}, {2, 3}} 
vector = {{4}, {5}} 

[email protected]{{vector, matrix}} 

एक अच्छा चाल क्या 0 के साथ किसी भी मैट्रिक्स ब्लॉक को प्रतिस्थापित करने से आपको सही आकार का शून्य ब्लॉक मिल जाता है।

7

मुझे लगता है कि कम से कम अस्पष्ट ऐसा करने का तरीका निम्नलिखित है:

PrependColumn[vector_List, matrix_List] := MapThread[Prepend, {matrix, vector}]; 

सामान्य तौर पर, MapThread समारोह है कि आप इस तरह के कार्यों के लिए सबसे अधिक बार इस्तेमाल करेंगे (मैं यह सब का उपयोग करें समय Grid के साथ अच्छी तरह से बनाने से पहले सरणी में लेबल जोड़ते समय), और यह Prepend[#1, #2]& के बजाय Prepend का उपयोग करने के लिए चीजों को बहुत स्पष्ट और अधिक संक्षिप्त बना सकता है।

7

मेरा मानना ​​है कि सबसे आम तरीका है, स्थानांतरित आगे जोड़ते हैं, और फिर से स्थानांतरित करने के लिए है:

PrependColumn[vector_List, matrix_List] := 
    Transpose[Prepend[Transpose[matrix], vector]] 
0

... बिल्कुल ... .. फायर द्वारा ... सरणी RandomReal[100,{10^8,5}] पर विभिन्न विधियों के अपने परीक्षणों से कॉलम को जोड़ने या प्रीपेड करने के लिए सबसे तेज़ तरीका (बच्चे, घर पर यह कोशिश न करें ... अगर आपकी मशीन नहीं है गति और स्मृति के लिए बनाया गया नहीं है, इस आकार को एक सरणी पर संचालन आपके कंप्यूटर को लटकाने की गारंटी है) ... यह है: Append[tmp\[Transpose], [email protected]@tmp]\[Transpose]Append को Prepend के साथ बदलें पर बदलें।

अगली सबसे तेज़ बात यह है: Table[tmp[[n]]~Join~{n}, {n, [email protected]}] - लगभग दोगुनी धीमी है।

+4

स्पष्ट रूप से आपने http://stackoverflow.com/questions/4270802/inserting-into-a-2d-list/4270825#4270825 में उत्तर को याद किया। 'ArrayFlatten' का उपयोग करना तेजी से प्रतीत होता है। –

संबंधित मुद्दे