我有一个二维和一维数组。我希望找到至少包含一次 1d 数组中的值的两行,如下所示:
import numpy as np
A = np.array([[0, 3, 1],
[9, 4, 6],
[2, 7, 3],
[1, 8, 9],
[6, 2, 7],
[4, 8, 0]])
B = np.array([0,1,2,3])
results = []
for elem in B:
results.append(np.where(A==elem)[0])
Run Code Online (Sandbox Code Playgroud)
这有效并产生以下数组:
[array([0, 5], dtype=int64),
array([0, 3], dtype=int64),
array([2, 4], dtype=int64),
array([0, 2], dtype=int64)]
Run Code Online (Sandbox Code Playgroud)
但这可能不是最好的处理方式。根据这个问题(搜索具有多个值的 Numpy 数组)给出的答案,我尝试了以下解决方案:
out1 = np.where(np.in1d(A, B))
num_arr = np.sort(B)
idx = np.searchsorted(B, A)
idx[idx==len(num_arr)] = 0
out2 = A[A == num_arr[idx]]
Run Code Online (Sandbox Code Playgroud)
但这些给了我不正确的值:
In [36]: out1
Out[36]: …Run Code Online (Sandbox Code Playgroud) 我试图用python和seaborn绘制错误栏,但我对它们的外观并不完全满意.
默认的seaborn错误栏如下所示:
但我想在这样的误差条上添加底线和顶线(为了区分两个误差线,它是默认的matplotlib样式):
我怎么能在seaborn中这样做?
这是代码:
import matplotlib.pyplot as plt
import seaborn as sns
fig1 = plt.figure(figsize=(20, 12))
x_values = [1,2,3,4]
y_values = [1,2,3,4]
y_error = [1,0.5,0.75,0.25]
plt.errorbar(x_values, y_values, yerr=y_error ,fmt='o', markersize=8)
plt.show()
Run Code Online (Sandbox Code Playgroud) 我的代码的以下行导致警告:
import pandas as pd
s = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
s.loc[-1] = [5,np.nan,np.nan,6]
grouped = s.groupby(['A'])
for key_m, group_m in grouped:
group_m.loc[-1] = [10,np.nan,np.nan,10]
C:\Anaconda3\lib\site-packages\ipykernel\__main__.py:10: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
Run Code Online (Sandbox Code Playgroud)
根据文档,这是推荐的做法,所以发生了什么?
谢谢你的帮助.
我有一个Pandas数据帧,格式如下:
Frequency | Value
1 10 2.8
2 20 2.5
3 30 2.2
4 40 2.3
Run Code Online (Sandbox Code Playgroud)
我想使用pandas.DataFrame.interpolate以便在频率35处添加一条线,其值在频率30和40之间线性插值.
在用户手册中,该示例显示了如何替换Nan,而不是如何在其他人之间添加值(Pandas doc).
什么是最好的方法?
我正在尝试使用轴和实际绘图之间的一些填充来做matplolib图.
这是我的示例代码:
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1)
x = np.linspace(0, 1)
y = np.sin(4 * np.pi * x) * np.exp(-5 * x)
plt.plot(x, y, 'r')
plt.grid(True)
plt.show()
Run Code Online (Sandbox Code Playgroud)
这就是我想要得到的:
我有一个包含3D模型的vtk文件,
我想提取点坐标和构面。
这是一个最小的工作示例:
import vtk
import numpy
from vtk.util.numpy_support import vtk_to_numpy
reader = vtk.vtkPolyDataReader()
reader.SetFileName('test.vtk')
reader.Update()
polydata = reader.GetOutput()
points = polydata.GetPoints()
array = points.GetData()
numpy_nodes = vtk_to_numpy(array)
Run Code Online (Sandbox Code Playgroud)
它的工作方式是numpy_nodes包含所有点的x,y,z坐标,但我不知所措,无法检索将该模型的各个方面与相应点相关联的列表。
我试过了:
facets= polydata.GetPolys()
array = facets.GetData()
numpy_nodes = vtk_to_numpy(array)
Run Code Online (Sandbox Code Playgroud)
但是,numpy_nodes这只是一个1D数组,我希望它是一个2D数组(大小为3 *刻面数),其中第一个维度包含指向该刻面的对应点数(如.ply文件中一样)。
任何有关如何进行的建议都将受到欢迎