Python Matplotlib干扰NumPy(在Windows上)

Python Matplotlib干扰NumPy(在Windows上),python,numpy,matplotlib,Python,Numpy,Matplotlib,下面描述的问题已被复制 假设你有以下几点 import numpy as np import matplotlib.pyplot as plt x = np.random.randint(5, size=(100, 12), dtype=np.int64) # [THERE IS ACTUALLY NO NEED TO SET THE DATA TYPE # `x = np.random.rand(100, 12)` yields the same problem] 你要计算x的秩 >

下面描述的问题已被复制


假设你有以下几点
import numpy as np
import matplotlib.pyplot as plt

x = np.random.randint(5, size=(100, 12), dtype=np.int64)
# [THERE IS ACTUALLY NO NEED TO SET THE DATA TYPE
# `x = np.random.rand(100, 12)` yields the same problem]
你要计算
x
的秩

>>> np.linalg.matrix_rank(x)
12
一切都很好。让我们从头开始重新启动一个新会话,这次它的底层代码是

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(1010)  # <-----
x               = np.random.randint(5, size=(100, 12), dtype=np.int64)
x_vals = y_vals = np.arange(0, .5, .05)

plt.plot(x_vals, y_vals, linestyle='--')

print(np.linalg.matrix_rank(x))
Linux下没有问题(使用相同的环境)


其他精度
  • 并非所有
    x
    的形状都会出现这种情况。很难说清楚。但是,这也不是随机的,而是单调地链接到
    x
    的(垂直和/或水平)形状
  • 问题是换位不变性
  • x
    在调用
    plt.plot
    之前与自身相比完全相同(使用比较)


  • 这个问题更多的是留下痕迹,而不是得到答案。这太奇怪了,我不得不把它写在某个地方。我已更改了我的
    线条样式

    这个问题的标题非常明确,足以让人们产生与我同样的问题


    另一个屏幕截图:

    GIF的代码如下

    import numpy as np
    import matplotlib.pyplot as plt
    import joblib as jl
    
    linestyles = [
        'solid', '-',
        'dotted',  # '.', => ValueError: '.' 
        'dashed', '--',
        'dashdot', '-.',
        ':', '', ' '    
    ]
    
    for ls in linestyles:
        print(26*'*', f"linestyle='{ls}'")
        
        np.random.seed(1010)
        x  = np.random.rand(9, 5)
        h0 = jl.hash(x)
        
        x_vals = y_vals = np.arange(0, .5, .05)
        plt.plot(x_vals, y_vals, linestyle=ls)
        # plt.show()
        
        h1 = jl.hash(x)
        mr = np.linalg.matrix_rank(x)
        print(
            '\t', mr, (not mr)*'<---------------[!!!]'
        )
        print('\t', 'Has not changed:', h0 == h1)
    
    将numpy导入为np
    将matplotlib.pyplot作为plt导入
    将joblib作为jl导入
    线型=[
    "实心","实心",,
    '虚线',#',=>ValueError:'。'
    "虚线","--",,
    “dashdot”,“-”,
    ':', '', ' '    
    ]
    对于线型中的ls:
    打印(26*'*',f“linestyle='{ls}'”)
    np.随机种子(1010)
    x=np.random.rand(9,5)
    h0=jl.hash(x)
    x_vals=y_vals=np.arange(0.5.05)
    plt.plt(x值、y值、线型=ls)
    #plt.show()
    h1=jl.hash(x)
    mr=np.linalg.matrix_秩(x)
    印刷品(
    “\t”,先生,(不是先生)*'调查

    正如作者所指出的,故事中最深的纤维与纤维有关,但由于某些原因,纤维无法聚合

    import numpy as np
    import matplotlib.pyplot as plt
    import joblib as jl
    
    linestyles = [
         ('-.',                    '-.'),  
         (':',                     ':'),  
         ('solid',                 'solid'),     # Same as (0, ()) or '-'
         ('dotted',                'dotted'),    # Same as (0, (1, 1)) or '.'
         ('dashed',                'dashed'),    # Same as '--'
         ('dashdot',               'dashdot'),
         
         ('loosely dotted',        (0, (1, 10))),
         ('dotted',                (0, (1, 1))),
         ('densely dotted',        (0, (1, 1))),
    
         ('loosely dashed',        (0, (5, 10))),
         ('dashed',                (0, (5, 5))),
         ('densely dashed',        (0, (5, 1))),
    
         ('loosely dashdotted',    (0, (3, 10, 1, 10))),
         ('dashdotted',            (0, (3, 5, 1, 5))),
         ('densely dashdotted',    (0, (3, 1, 1, 1))),
    
         ('dashdotdotted',         (0, (3, 5, 1, 5, 1, 5))),
         ('loosely dashdotdotted', (0, (3, 10, 1, 10, 1, 10))),
         ('densely dashdotdotted', (0, (3, 1, 1, 1, 1, 1)))
    ]
    
    x_vals = y_vals = np.arange(0, .5, .05)
    
    for name, tuple_ in linestyles:
        print(f"linestyle='{name}'")
        
        np.random.seed(1010)
        x  = np.random.rand(9, 5)
        h0 = jl.hash(x)
    
        plt.plot(x_vals, y_vals, linestyle=tuple_)
        # plt.show()
        
        try:
            _ = np.linalg.svd(x)
        except np.linalg.LinAlgError as err:
            print(
                4*' ', err, '|', 'Has not changed:',
                h0 == jl.hash(x)
            )
    
    壳牌的产量

    回溯

    未捕获的回溯是:

    Traceback (most recent call last):
      File "D:\matplotlib-interfering-with-numpy-on-windows.py", line 25, in <module>
        mr = np.linalg.svd(x)
      File "<__array_function__ internals>", line 6, in svd
      File "███████████\lib\site-packages\numpy\linalg\linalg.py", line 1661, in svd
        u, s, vh = gufunc(a, signature=signature, extobj=extobj)
      File "███████████\lib\site-packages\numpy\linalg\linalg.py", line 97, in _raise_linalgerror_svd_nonconvergence
        raise LinAlgError("SVD did not converge")
    numpy.linalg.LinAlgError: SVD did not converge
    
    回溯(最近一次呼叫最后一次):
    文件“D:\matplotlib干扰windows.py上的numpy”,第25行,在
    mr=np.linalg.svd(x)
    svd中第6行的文件“”
    文件“███████████\svd中的lib\site packages\numpy\linalg\linalg.py“,第1661行
    u、 s,vh=gufunc(a,签名=signature,exportbj=exportbj)
    文件“███████████\lib\site packages\numpy\linalg\linalg.py”,第97行,在“上升”和“直线误差”中
    raise LINALGEROR(“SVD未收敛”)
    numpy.linalg.linalgeror:SVD未收敛
    

    将驱动器向下挖掘到
    ███████████\lib\site packages\numpy\linalg\\u umath\u linalg.cp37-win\u amd64.pyd
    。很难进一步挖掘。

    评论不用于扩展讨论;此对话已被锁定。它只是暂时锁定,因为请求移动到聊天室后评论非常活跃。您可以标记剩余的评论以引起
    主持人的注意。
    。聊天登录w只需点击提供的链接,就可以为我工作。所有的帖子都在那里,最重要的是注意这是可复制的。@MichaelSzczesny是的,我知道。我今天有时间做这件事……不是明天。我认为提出的问题太奇怪了,它的可信度真的很低。不得不在聊天中挖掘不利于它的缺点想法。在我的例子中,当我点击链接时,我被告知…我已登录。潜在的错误已经存在。这在github中提到。
    ======== RESTART: D:\matplotlib-interfering-with-numpy-on-windows.py ========
    linestyle='-.'
         SVD did not converge | Has not changed: True
    linestyle=':'
         SVD did not converge | Has not changed: True
    linestyle='solid'
    linestyle='dotted'
         SVD did not converge | Has not changed: True
    linestyle='dashed'
         SVD did not converge | Has not changed: True
    linestyle='dashdot'
         SVD did not converge | Has not changed: True
    linestyle='loosely dotted'
    linestyle='dotted'
    linestyle='densely dotted'
    linestyle='loosely dashed'
    linestyle='dashed'
    linestyle='densely dashed'
    linestyle='loosely dashdotted'
    linestyle='dashdotted'
    linestyle='densely dashdotted'
    linestyle='dashdotdotted'
    linestyle='loosely dashdotdotted'
    linestyle='densely dashdotdotted'
    
    Traceback (most recent call last):
      File "D:\matplotlib-interfering-with-numpy-on-windows.py", line 25, in <module>
        mr = np.linalg.svd(x)
      File "<__array_function__ internals>", line 6, in svd
      File "███████████\lib\site-packages\numpy\linalg\linalg.py", line 1661, in svd
        u, s, vh = gufunc(a, signature=signature, extobj=extobj)
      File "███████████\lib\site-packages\numpy\linalg\linalg.py", line 97, in _raise_linalgerror_svd_nonconvergence
        raise LinAlgError("SVD did not converge")
    numpy.linalg.LinAlgError: SVD did not converge