जबकि np.outer
यह करने के लिए सबसे आसान तरीका है, मैंने सोचा था मैं तो बस आप कैसे यह करने के लिए (N,)
आकार सरणी में हेरफेर हो सकता है उल्लेख चाहते हैं:
In [17]: a = np.arange(4)
In [18]: np.dot(a[:,None], a[None,:])
Out[18]:
array([[0, 0, 0, 0],
[0, 1, 2, 3],
[0, 2, 4, 6],
[0, 3, 6, 9]])
In [19]: np.outer(a,a)
Out[19]:
array([[0, 0, 0, 0],
[0, 1, 2, 3],
[0, 2, 4, 6],
[0, 3, 6, 9]])
आप कहाँ वैकल्पिक रूप से बदल सकते np.newaxis
के साथ।
यह करने के लिए एक और अधिक विदेशी रास्ता np.einsum साथ है:
In [20]: np.einsum('i,j', a, a)
Out[20]:
array([[0, 0, 0, 0],
[0, 1, 2, 3],
[0, 2, 4, 6],
[0, 3, 6, 9]])
और सिर्फ मनोरंजन के लिए, कुछ समय है, जो की संभावना जा रहे हार्डवेयर और numpy संस्करण/संकलन के आधार पर भिन्न करने के लिए:
छोटे -ish वेक्टर
In [36]: a = np.arange(5, dtype=np.float64)
In [37]: %timeit np.outer(a,a)
100000 loops, best of 3: 17.7 µs per loop
In [38]: %timeit np.dot(a[:,None],a[None,:])
100000 loops, best of 3: 11 µs per loop
In [39]: %timeit np.einsum('i,j', a, a)
1 loops, best of 3: 11.9 µs per loop
In [40]: %timeit a[:, None] * a
100000 loops, best of 3: 9.68 µs per loop
और कुछ थोड़ा बड़ा
In [42]: a = np.arange(500, dtype=np.float64)
In [43]: %timeit np.outer(a,a)
1000 loops, best of 3: 605 µs per loop
In [44]: %timeit np.dot(a[:,None],a[None,:])
1000 loops, best of 3: 1.29 ms per loop
In [45]: %timeit np.einsum('i,j', a, a)
1000 loops, best of 3: 359 µs per loop
In [46]: %timeit a[:, None] * a
1000 loops, best of 3: 597 µs per loop
नमूना 'x' कृपया? – cdhagmann
@ ᴋᴇʏsᴇʀ यह एक मैट्रिक्स – cdhagmann
@cdhagmann वाई देता है। मैंने देखा कि आयाम – keyser