使用python和numpy重写计算uv分量脚本

本文详细介绍了如何利用Python编程语言和强大的NumPy库来重写计算UV纹理坐标分量的脚本。通过实例代码,展示了如何高效地进行数学运算和处理图像数据,提升UV坐标计算的效率与准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# -*- coding: utf-8 -*-
"""
Created on Fri Jul 03 14:15:43 2015

@author: wawatou83
"""

import pandas as pd
import numpy as np
import os

InputDir = r'D:\R\P'

rootdir = InputDir
#初始化U、V、W以高度层
weixiangDfInitial=pd.DataFrame({'Height':range(100,6000,60)})
jingxiangDfInitial=pd.DataFrame({'Height':range(100,6000,60)})
chuizhiDfInitial=pd.DataFrame({'Height':range(100,6000,60)})

#定义计算函数,用到数组的元素级别计算
def calUV(jiaodu,sudu):

    u = (-1) * np.sin( float(jiaodu) * np.pi / 180) * float(sudu)
    v = (-1) * np.cos( float(jiaodu) * np.pi / 180) * float(sudu)

    return '%.2f' % u,'%.2f' % v
    #return u,v

for parent,dirnames,filenames in os.walk(rootdir):

     for filename in filenames:

        df=pd.read_csv(os.path.join(parent,filename),skiprows=3,header=None,nrows=99,sep=' ')
        #dataframe转换为矩阵
        #注意df.replace('/////',np.nan)后df仍然是不变的
        array = df.replace('/////',np.nan).iloc[:,1:3].values
        #计算函数应用到数组元素级别
        calUV_ufunc = np.frompyfunc(calUV, 2, 2)
        [U, V] = calUV_ufunc(array[:,0],array[:,1])
        #print U.dtype注意UV的类型为object
        #转换UV类型为float
        U = U.astype(np.float)
        V = V.astype(np.float)

        #矩阵重新转为dataframe
        Udf = pd.DataFrame(U)
        Vdf = pd.DataFrame(V)
        #粘贴
        weixianglocaldf = weixiangDfInitial
        weixiangpieces=[weixianglocaldf,Udf.replace(np.nan, 9999)]
        weixiangDfInitial=pd.concat(weixiangpieces,axis=1,ignore_index=True)

        jingxianglocaldf = jingxiangDfInitial
        jingxiangpieces=[jingxianglocaldf,Vdf.replace(np.nan, 9999)]
        jingxiangDfInitial=pd.concat(jingxiangpieces,axis=1,ignore_index=True)

        chuizhilocaldf = chuizhiDfInitial
        chuizhipieces=[chuizhilocaldf,df.iloc[:,3]]
        chuizhiDfInitial=pd.concat(chuizhipieces,axis=1,ignore_index=True)

print weixiangDfInitial, jingxiangDfInitial ,chuizhiDfInitial 
#dataframe可以很方便的转置   
weixiangDfInitial.T.to_csv('weixiang.txt')         
jingxiangDfInitial.T.to_csv('jingxiang.txt') 
chuizhiDfInitial.T.to_csv('chuizhi.txt')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值