小编arg*_*m2f的帖子

Pandas Float64 与 float64 dtypes(注意大写)导致非数字错误?

我遇到了一些奇怪的错误,经过多次搜索后,这些错误似乎(可能)来自我的数据在某些情况下不被视为数字。这似乎是因为我使用了 Float64 dtype (我认为这是我应该做的)。

太长了;Float64 和 float64 有什么区别?为什么使用 Float64 数据会破坏很多东西,例如pd.interpolate?Float64 存在的目的是什么?

例子:

import pandas as pd
import numpy as np                                                             
                                                                                
TESTDATA = u"""\                                                                
    val1, val2, val3                                                            
     1.0,  2.0,  3.0                                                            
     4.0,  5.0,  6.0                                                            
     7.0,  8.0,  9.0                                                            
    10.0, NaN, 12.0                                                             
    13.0, 14.0, 15.0                                                            
"""                                                                             
                                                                                
df = pd.read_csv(StringIO(TESTDATA), sep=r",\s*", engine='python', dtype=pd.Floa
t64Dtype())                                                                     
                                                                                
print(df)                                                                       
print()                                                                         
print(df.dtypes) 
Run Code Online (Sandbox Code Playgroud)

这输出:

   val1  val2  val3
0   1.0   2.0   3.0
1   4.0   5.0   6.0
2   7.0   8.0   9.0
3  10.0  <NA>  12.0
4  13.0  14.0  15.0

val1 …
Run Code Online (Sandbox Code Playgroud)

types casting numpy pandas

14
推荐指数
2
解决办法
8574
查看次数

使用numpy操作数组后,Python OpenCV绘制错误

我正在用OpenCV读取图像,并尝试用numpy做一些事情(旋转90度).imshow从matplotlib 查看结果,这一切似乎都很好 - 图像旋转.但是,我不能在新图像上使用OpenCV的绘图方法.在以下代码中(我在sagemath云工作表中运行此代码):

%python
import cv2
import matplotlib.pyplot as plt
import numpy as np
import os, sys
image = np.array( cv2.imread('imagename.png') )
plt.imshow(image,cmap='gray')
image = np.array(np.rot90(image,3) ) # put it right side up
plt.imshow(image,cmap='gray')
cv2.rectangle(image,(0,0),(100,100),(255,0,0),2)
plt.imshow(image,cmap='gray')
Run Code Online (Sandbox Code Playgroud)

我在cv2.rectangle()命令上收到以下错误:

TypeError: Layout of the output array img is incompatible with cv::Mat (step[ndims-1] != elemsize or step[1] != elemsize*nchannels)
Run Code Online (Sandbox Code Playgroud)

如果我np.array(np.rot90(image,4) )改用(即旋转360),错误就会消失.因此,维度的变化似乎搞砸了.OpenCV是否在内部存储了我需要更新的维度或其他内容?

编辑:解决问题image = image.copy()后添加rot90().请参阅下面的rayryeng的答案.

python opencv numpy image image-processing

8
推荐指数
1
解决办法
6749
查看次数

如何用适合的图像和轮廓图创建Matplotlib图形?

我想将2d数据绘制为图像,并沿着x轴和y轴在下方和侧面显示轮廓图。这是一种非常常见的显示数据的方法,因此可能有一种更简单的方法来显示此数据。我想找到一种最简单,最可靠的方法,可以正确地执行此操作,并且不使用matplotlib之外的任何方法(尽管我会对了解其他可能特别相关的软件包感兴趣)。特别是,如果数据的形状(长宽比)发生变化,则该方法应该在不进行任何更改的情况下工作。

我的主要问题是使侧面图正确缩放,以便其边界与主要图匹配。

示例代码:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
# generate grid and test data
x, y = np.linspace(-3,3,300), np.linspace(-1,1,100)
X, Y = np.meshgrid(x,y)
def f(x,y) :
    return np.exp(-(x**2/4+y**2)/.2)*np.cos((x**2+y**2)*10)**2
data = f(X,Y)

# 2d image plot with profiles
h, w = data.shape
gs = gridspec.GridSpec(2, 2,width_ratios=[w,w*.2], height_ratios=[h,h*.2])
ax = [plt.subplot(gs[0]),plt.subplot(gs[1]),plt.subplot(gs[2])]
bounds = [x.min(),x.max(),y.min(),y.max()]
ax[0].imshow(data, cmap='gray', extent = bounds, origin='lower')
ax[1].plot(data[:,w/2],Y[:,w/2],'.',data[:,w/2],Y[:,w/2])
ax[1].axis([data[:,w/2].max(), data[:,w/2].min(), Y.min(), Y.max()])
ax[2].plot(X[h/2,:],data[h/2,:],'.',X[h/2,:],data[h/2,:])
plt.show()
Run Code Online (Sandbox Code Playgroud)

从下面的输出中可以看到,事物向右缩放的方式与边界没有正确匹配。

部分解决方案:

1)手动播放图形尺寸以找到正确的长宽比,以便正确显示(可以自动使用图像比例+填充+所使用的宽度比例吗?)。当已经有太多的包装选项被认为可以自动处理这些事情时,它似乎很俗气。编辑: plt.gcf().set_figheight(f.get_figwidth()*h/w)如果不更改填充似乎工作。

2)添加ax[0].set_aspect('auto') …

python plot 2d matplotlib

5
推荐指数
1
解决办法
2127
查看次数

Matplotlib 流线图,具有不中断或结束的流线

我想制作一个流线图,当它们靠得太近时不会停止。我宁愿在两个方向上计算每个流线,直到它碰到窗口的边缘。结果是在某些区域它们会混在一起。但这就是我想要的。

我无论如何要在matplotlib中做到这一点?如果没有,我可以使用另一个工具来与 python/numpy 交互吗?

import numpy as np
import matplotlib.pyplot as plt
Y,X = np.mgrid[-10:10:.01, -10:10:.01]
U, V = Y**2, X**2
plt.streamplot(X,Y, U,V, density=1)
plt.show(False)
Run Code Online (Sandbox Code Playgroud)

流图示例

plot numpy matplotlib

5
推荐指数
2
解决办法
3001
查看次数

如何在 matplotlib 3D 曲面图上突出显示切片?

我有一个 3D 曲面图。我还想在 2D 中绘制此图的切片,并以某种方式在 3D 图中指示切片的来源(例如为切片上的点着色以“突出显示”切片,或绘制相交平面或其他东西)。

下面是一个示例,我只是将特定行设置为 0,以便我可以看到切片在 3D 图中的位置。

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt


# Grid and test function
N = 29;
x,y = np.linspace(-1,1, N*2), np.linspace(-1,1, N)
X,Y = np.meshgrid(x,y)
F = lambda X,Y : np.sin(10*X)/(1+5*(X**2+Y**2))
Z = F(X,Y)

# 3D Surface plot
plt.figure(figsize = (5,6))
Z2 = Z.copy(); Z2[10,:] = 0 # <----- Replace this code
ax = plt.subplot(211, projection='3d')
ax.plot_surface(X,Y,Z2)

# 2D Plot of slice of 3D plot …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

5
推荐指数
1
解决办法
2206
查看次数

标签 统计

matplotlib ×3

numpy ×3

python ×3

plot ×2

2d ×1

casting ×1

image ×1

image-processing ×1

opencv ×1

pandas ×1

types ×1