तो मैं 7x7 मैट्रिक्स 'nprob' में संग्रहीत संभाव्यता घनत्व के अनुसार रंगीन वर्गों के साथ एक ग्राफ बनाने की कोशिश कर रहा हूं।

nprob = prob/sum
print(nprob.todense())

x,y = np.meshgrid(np.arange(0,7,1),np.arange(0,7,1)) 
fig, dens = plt.subplots()
dens.set_title('probability density for...')
dens.set_xlabel('i')
dens.set_ylabel('t')
m = dens.pcolormesh(x, y, nprob[x,y], cmap = 'Blues', shading='auto')
cbar=plt.colorbar(m)

मुझे निम्नलिखित त्रुटि मिलती है:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-132-6d9dfcd16dcc> in <module>
      9 dens.set_xlabel('i')
     10 dens.set_ylabel('t')
---> 11 m = dens.pcolormesh(x, y, nprob[x,y], cmap = 'Blues', shading='auto')
     12 cbar=plt.colorbar(m)

/opt/miniconda3/lib/python3.8/site-packages/matplotlib/__init__.py in inner(ax, data, *args, **kwargs)
   1445     def inner(ax, *args, data=None, **kwargs):
   1446         if data is None:
-> 1447             return func(ax, *map(sanitize_sequence, args), **kwargs)
   1448 
   1449         bound = new_sig.bind(ax, *args, **kwargs)

/opt/miniconda3/lib/python3.8/site-packages/matplotlib/axes/_axes.py in pcolormesh(self, alpha, norm, cmap, vmin, vmax, shading, antialiased, *args, **kwargs)
   6090         kwargs.setdefault('edgecolors', 'None')
   6091 
-> 6092         X, Y, C, shading = self._pcolorargs('pcolormesh', *args,
   6093                                             shading=shading, kwargs=kwargs)
   6094         Ny, Nx = X.shape

/opt/miniconda3/lib/python3.8/site-packages/matplotlib/axes/_axes.py in _pcolorargs(self, funcname, shading, *args, **kwargs)
   5583                 if isinstance(Y, np.ma.core.MaskedArray):
   5584                     Y = Y.data
-> 5585             nrows, ncols = C.shape
   5586         else:
   5587             raise TypeError(f'{funcname}() takes 1 or 3 positional arguments '

ValueError: not enough values to unpack (expected 2, got 0)

ईमानदार होने के लिए, मुझे यह त्रुटि बहुत अधिक मिलती है, और मैं आमतौर पर चीजों को तब तक फिर से जोड़ देता हूं जब तक कि मुझे वह नहीं मिल जाता है जिसे मैं बेहतर समझता हूं, इसलिए शायद यह जानने का समय है कि इसका क्या अर्थ है। क्या स्पष्ट नहीं है? मैं चाहता हूं कि यह ग्रिड पर 49 निर्दिष्ट बिंदुओं पर संभाव्यता घनत्व को रेखांकन करे।

0
qmstatdeath 24 जिंदा 2021, 03:29

1 उत्तर

सबसे बढ़िया उत्तर

एक नमूना विरल मैट्रिक्स बनाएं (आप एक प्रदान कर सकते थे :( ):

In [31]: from scipy import sparse
In [32]: nprob = sparse.csr_matrix(np.eye(7))
In [33]: nprob
Out[33]: 
<7x7 sparse matrix of type '<class 'numpy.float64'>'
    with 7 stored elements in Compressed Sparse Row format>
In [34]: nprob.A
Out[34]: 
array([[1., 0., 0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0., 0.],
       [0., 0., 0., 1., 0., 0., 0.],
       [0., 0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 0., 0., 1.]])
In [35]: x,y = np.meshgrid(np.arange(0,7,1),np.arange(0,7,1))

ध्यान दें कि आपका अनुक्रमण क्या करता है - ज्यादा नहीं - यह अभी भी सीएसआर मैट्रिक्स के रूप में है:

In [36]: nprob[x,y]
Out[36]: 
<7x7 sparse matrix of type '<class 'numpy.float64'>'
    with 7 stored elements in Compressed Sparse Row format>

अब आपका प्लॉट:

In [37]: fig, dens = plt.subplots()
    ...: dens.set_title('probability density for...')
    ...: dens.set_xlabel('i')
    ...: dens.set_ylabel('t')
Out[37]: Text(0, 0.5, 't')
In [38]: m = dens.pcolormesh(x, y, nprob[x,y], cmap = 'Blues', shading='auto')
Traceback (most recent call last):
  File "<ipython-input-38-62cf80a40eaf>", line 1, in <module>
    m = dens.pcolormesh(x, y, nprob[x,y], cmap = 'Blues', shading='auto')
  File "/usr/local/lib/python3.8/dist-packages/matplotlib/__init__.py", line 1438, in inner
    return func(ax, *map(sanitize_sequence, args), **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/matplotlib/axes/_axes.py", line 6093, in pcolormesh
    X, Y, C, shading = self._pcolorargs('pcolormesh', *args,
  File "/usr/local/lib/python3.8/dist-packages/matplotlib/axes/_axes.py", line 5582, in _pcolorargs
    nrows, ncols = C.shape
ValueError: not enough values to unpack (expected 2, got 0)

लेकिन क्या होगा अगर हम उस मैट्रिक्स के घने संस्करण की साजिश रचें:

In [39]: m = dens.pcolormesh(x, y, nprob[x,y].A, cmap = 'Blues', shading='auto')
    

यह काम करता है।

plt विरल मैट्रिसेस के बारे में कुछ भी (विशेष) नहीं जानता। मुझे संदेह है कि यह बस कर रहा है:

In [41]: np.array(nprob)
Out[41]: 
array(<7x7 sparse matrix of type '<class 'numpy.float64'>'
    with 7 stored elements in Compressed Sparse Row format>, dtype=object)
In [42]: _.shape
Out[42]: ()

यह एक 0d ऑब्जेक्ट dtype सरणी है, न कि 2d सरणी जो कि प्लॉट फ़ंक्शन की अपेक्षा करता है।

1
hpaulj 24 जिंदा 2021, 05:28