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