gpt4 book ai didi

python - asfortranarray 中的运行时警告

转载 作者:行者123 更新时间:2023-12-01 03:13:25 26 4
gpt4 key购买 nike

我正在使用 Python 中的 SPAMS 进行字典学习

这是我的代码=>

import spams
import numpy as np
from PIL import Image
import time
import matplotlib.pyplot as plt

img_file = 'gray-car.jpg'
try:
img = Image.open(img_file)
except:
print("Cannot load image %s : skipping test" %img_file)
I = np.array(img) / 255.

print('Shape : ',I.shape)

if I.ndim == 3:
A = np.asfortranarray(I.reshape((I.shape[0],I.shape[1] * I.shape[2])))
rgb = True
else:
A = np.asfortranarray(I)
rgb = False

m = 8;n = 8;
X = spams.im2col_sliding(A,m,n,rgb)

X = X - np.tile(np.mean(X,0),(X.shape[0],1))
X = np.asfortranarray(X / np.tile(np.sqrt((X * X).sum(axis=0)),(X.shape[0],1)),dtype=np.float64)
param = { 'K' : 100, # learns a dictionary with 100 elements
'lambda1' : 0.15, 'numThreads' : 4, 'batchsize' : 400,
'iter' : 1000}

tic = time.time()
D = spams.trainDL(X,**param)
tac = time.time()
t = tac - tic
print('time of computation for Dictionary Learning: %f' %t)

##param['approx'] = 0
# save dictionnary as dict.png
plt.imshow(D)
plt.show()
_objective(X,D,param,'dict')

这是我在学习过程中遇到的错误=>

noise.py:27: RuntimeWarning: invalid value encountered in true_divide 
X = np.asfortranarray(X / np.tile(np.sqrt((X *
X).sum(axis=0)),(X.shape[0],1)),dtype=np.float64)
/usr/local/lib/python3.4/dist-packages/numpy/core/fromnumeric.py:2699:
VisibleDeprecationWarning: `rank` is deprecated; use the `ndim`
attribute or function instead. To find the rank of a matrix see
`numpy.linalg.matrix_rank`. VisibleDeprecationWarning)

输入我在这里使用的图像=>

enter image description here

最佳答案

让我们猜测 X 在某种程度上代表了一个图像,并且有一个“白色”边框:

In [127]: X=np.zeros((10,10))
In [128]: X[3:8,3:8]=1
....
In [130]: np.sqrt(X*X).sum(axis=0)
Out[130]: array([ 0., 0., 0., 5., 5., 5., 5., 5., 0., 0.])

平铺除法很容易包含 0,并产生运行时警告:

In [134]: X/np.tile(np.sqrt((X * X).sum(axis=0)),(X.shape[0],1))
/usr/local/bin/ipython3:1: RuntimeWarning: invalid value encountered in true_divide
#!/usr/bin/python3
Out[134]:
array([[ nan, nan, nan, 0. , 0. ,
0. , 0. , 0. , nan, nan],
[ nan, nan, nan, 0. , 0. ,
0. , 0. , 0. , nan, nan],
... ,
0. , 0. , 0. , nan, nan]])

我不知道为什么它使用 asfortranarray(),但我没有从中得到任何进一步的错误。

VisibleDeprecationWarning in python

是询问此 VisibleDeprecationWarning 的帖子示例。有一个 np.rank 函数:

In [138]: np.rank(X)
/usr/local/bin/ipython3:1: VisibleDeprecationWarning: `rank` is deprecated; use the `ndim` attribute or function instead. To find the rank of a matrix see `numpy.linalg.matrix_rank`.
#!/usr/bin/python3

一些旧的或晦涩的代码使用rank而不是ndim

我很想责怪 asfortranarray,我以前从未见过它被使用过。但它目前的代码只是:

return array(a, dtype, copy=False, order='F', ndmin=1)

不应有隐藏rank调用的晦涩角落。

我认为我们需要更多地了解X,特别是它的形状和数据类型。也许也是它的进步。 im2col_sliding 表明它是使用 as_strided 生成的滑动窗口数组。

关于python - asfortranarray 中的运行时警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42679536/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com