विवरण
दो वेक्टर a = [a0, a1, ..., aM] और b = [b0, b1, ..., bN] दिए जाने पर, बाह्य गुणनफल (outer product) एक मैट्रिक्स होता है जहां तत्व (i,j) पर a[i] * b[j] होता है। NumPy में numpy.outer() फंक्शन इसकी गणना करता है। मैंडेलब्रॉट सेट गणना के लिए कॉम्प्लेक्स प्लेन ग्रिड बनाने के लिए इसका उपयोग किया जा सकता है।
संबंधित फंक्शन्स
numpy.outer(a, b)- दो 1-D ऐरे का बाह्य गुणनफलnumpy.ones(shape)- दिए गए आकार और प्रकार का ऐरे, 1 से भराnumpy.linspace(start, stop, num)- निर्दिष्ट अंतराल पर समान रूप से वितरित संख्याएं
चरण
import numpy as np
# वास्तविक भाग: x-निर्देशांक
rl = np.outer(np.ones((5,)), np.linspace(-2, 2, 5))
print("कॉम्प्लेक्स संख्या का वास्तविक भाग...\n", rl)
# काल्पनिक भाग: y-निर्देशांक
im = np.outer(1j * np.linspace(2, -2, 5), np.ones((5,)))
print("\nकॉम्प्लेक्स संख्याओं का काल्पनिक भाग...\n", im)
# ग्रिड बनाएं: कॉम्प्लेक्स संख्याएं = वास्तविक + काल्पनिक
grid = rl + im
पूर्ण उदाहरण
import numpy as np
# बाह्य गुणनफल के साथ मैंडेलब्रॉट ग्रिड बनाएं
# वास्तविक भाग
rl = np.outer(np.ones((5,)), np.linspace(-2, 2, 5))
print("कॉम्प्लेक्स संख्या का वास्तविक भाग...\n", rl)
# काल्पनिक भाग
im = np.outer(1j * np.linspace(2, -2, 5), np.ones((5,)))
print("\nकॉम्प्लेक्स संख्याओं का काल्पनिक भाग...\n", im)
# ग्रिड बनाएं
grid = rl + im
print("\nग्रिड प्रदर्शित...\n", grid)
आउटपुट
कॉम्प्लेक्स संख्या का वास्तविक भाग...
[[-2. -1. 0. 1. 2.]
[-2. -1. 0. 1. 2.]
[-2. -1. 0. 1. 2.]
[-2. -1. 0. 1. 2.]
[-2. -1. 0. 1. 2.]]
कॉम्प्लेक्स संख्याओं का काल्पनिक भाग...
[[ 0.+2.j 0.+2.j 0.+2.j 0.+2.j 0.+2.j]
[ 0.+1.j 0.+1.j 0.+1.j 0.+1.j 0.+1.j]
[ 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j]
[ 0.-1.j 0.-1.j 0.-1.j 0.-1.j 0.-1.j]
[ 0.-2.j 0.-2.j 0.-2.j 0.-2.j 0.-2.j]]
ग्रिड प्रदर्शित...
[[-2.+2.j -1.+2.j 0.+2.j 1.+2.j 2.+2.j]
[-2.+1.j -1.+1.j 0.+1.j 1.+1.j 2.+1.j]
[-2.+0.j -1.+0.j 0.+0.j 1.+0.j 2.+0.j]
[-2.-1.j -1.-1.j 0.-1.j 1.-1.j 2.-1.j]
[-2.-2.j -1.-2.j 0.-2.j 1.-2.j 2.-2.j]]
मैंडेलब्रॉट सेट गणना
def mandelbrot(c, max_iter=100):
z = 0
for n in range(max_iter):
if abs(z) > 2:
return n
z = z*z + c
return max_iter
# ग्रिड पर लागू करें
mandelbrot_set = np.array([[mandelbrot(c) for c in row] for row in grid])
print(mandelbrot_set)
वैकल्पिक: meshgrid का उपयोग
# अधिक पठनीय विकल्प
x = np.linspace(-2, 2, 5)
y = np.linspace(2, -2, 5)
X, Y = np.meshgrid(x, y)
grid = X + 1j * Y
मुख्य बिंदु
outerका उपयोग 1D वेक्टर से 2D ग्रिड बनाने के लिए कुशल हैmeshgridअधिक पठनीय और लचीला है- मैंडेलब्रॉट के लिए,
linspaceरेंज आमतौर पर [-2, 1] × [-1.5, 1.5] होती है - बड़े ग्रिड के लिए वेक्टराइज्ड ऑपरेशन का उपयोग करें