python - 如何迭代 numpy 矩阵和填充值?

标签 python pandas numpy

我有两个数据框,其中一个有两列(图形边缘列表),另一个数据框是这些点的位置。我想在第一个数据帧中搜索并替换每个点的 x 和 y 坐标,而不是两个单独数据帧中的点。首先,我将数据帧转换为 numpy 数组。 例如,假设我们将 xx 作为边缘列表,将 yy 作为坐标,如下所示:

xx= np.array([(4,2),(3,5)])
yy=np.array([(2,6,7),(5,5,6),(4,8,9),(3,2,2)])

所以 xx 是我们的边缘点,yy 是每个点的坐标(例如点 4 的 x 值为 8,y 值为 9) 然后我尝试用相应的 x 坐标值替换节点:

zz=[]
for i in np.nditer(xx,order='F'):
    cc=np.where(yy[:,0]==i)
    zz.append(cc[0][0])
zz=np.array(zz)
q=[]
for i in range(xx.size):
    q.append(yy[zz[i],1])
xcoordinates=np.array(q).reshape(int(xx.size/2),2)

但是 reshape 后结果不正确:

array([[8, 2],
       [6, 5]])

请告诉我如何获得 x 的结果:

[8,6]
[2,5]

我对 python 还很陌生,无法理解复杂的代码。

最佳答案

需要对第二个数组进行一些处理,但您可以创建一个可以使用 xx 进行索引的查找数组。 。

u = np.empty(yy[:, 0].max() + 1, dtype=yy.dtype)
u[yy[:, 0]] = yy[:, 1]

u[xx]

array([[8, 6],
       [2, 5]])
<小时/>

此答案提出了一些您应该考虑的假设。

1) yy必须是唯一的,并且必须有一个整数 dtype

2) xx必须关注yy.min() < xx < yy.max()否则你会得到 IndexError

3) xx 的所有值必须位于 y[:, 0]否则您将在映射中得到垃圾值。

关于python - 如何迭代 numpy 矩阵和填充值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56797240/

相关文章:

python - 如何用Python求数据集每一列的熵?

python - Selenium find_elements_by_css_selector 返回一个空列表

python - 用于调试的 pygtk 控制台输出

numpy - 从整数创建 tz 感知 pandas 时间戳对象

python - 获取数组中匹配元素的索引,考虑重复

python - 对 NumPy 数组中的每 x 个数字进行平均

python - 在 Tkinter、Python 3 中设置窗口尺寸

python - 判断iterable时得到NameError : name 'Iterable' is not defined

Python:从excel中的数据创建字典

python - 优化代码以查找 DataFrame 中每行过去 30 天的值的中位数