因此,我一直在研究SensorEvent文档,试图找出如何找出相对于手机给定轴的北方向.我画了一个小图像,说明了我对坐标系如何工作的概念:

因此,如果世界坐标是x,y和z,其中磁北沿z和y指向天空,并且手机的坐标是Px,Py和Pz,那么我希望能够计算投影将每个载体放在另一个上.
似乎SENSOR_TYPE_ROTATION_VECTOR看起来可能是正确的,但似乎没有给我足够的信息来获得所有这些预测.我应该将ROTATION_VECTOR标准化并将其添加到我关心的轴上,然后拉出组件吗?
另一个大的单个传感器似乎是SENSOR_TYPE_ORIENTATION,但我再也不清楚如何处理这些值.如果我想知道真实世界坐标系在Py上的三个投影,我是否只是沿给定坐标旋转[ 0,1,0 ],如下所示:
// Assume here that I've received values
// and broken them out into
// a = azimuth
// p = pitch
// r = roll
// Convert to radians
a = a*Math.Pi/180;
p = p*Math.PI/180;
r = r*Math.PI/180;
// Given that Py is initially 0, 1, 0, apply general rotation matrix:
float[] Py = …Run Code Online (Sandbox Code Playgroud) 在许多情况下,我发现将方轴放在图形上很方便,这样我就可以轻松地以transAxes单位进行工作,而不必担心图形的纵横比。然而,我遇到的一个问题是,当你画一条线时,线宽lw/2从路径的任一方向延伸点。这是正常的、预期的行为,当然,但它会导致问题,如果我试图将某些东西刻录到某些轴上(并使用边界框中的所有空间),线条将夹在轴的边缘. 我可以设置clip_on=False,但这只会使我试图在轴上内切的图形超出轴的边界。我的问题是 - 我如何在“线宽”规格(以点为单位)和transAxes 单位,以便我可以补偿形状的额外长度/宽度?
我已经制定了一个简单的 MWE 来证明我的意思:
"""
MWE demonstrating the cliping of linewidths that are inscribed in axes.
"""
from __future__ import division
from matplotlib.pyplot import figure, show, savefig
from matplotlib.pyplot import Circle
from matplotlib.lines import Line2D
# Make a figure
(fig_w, fig_h) = (7.5, 2.5)
cdpi = 150
fig_aspect = fig_h/fig_w
fig = figure(1, figsize=(fig_w, fig_h), dpi=cdpi)
# Helper functions to center the circles
get_w_from_h = lambda h: h*fig_aspect
get_b_from_h …Run Code Online (Sandbox Code Playgroud) 我正在尝试将csv文件读入pandas数据帧.但是,csv包含重音符号.我使用的是Python 2.7
我遇到了一个UnicodeDecodeError因为第一列有重音.我已经在很多网站上阅读过这样的关于CSV文件中UTF-8的问题,这篇关于与新行相关的CSV错误的博客文章,以及关于Python 2.7中UTF-8问题的博客文章.
我使用了从那里找到的答案来尝试修改我的代码.原来我有:
import pandas as pd
#Create a dataframe with the data we are interested in
df = pd.DataFrame.from_csv('MYDATA.csv')
mode = lambda ts: ts.value_counts(sort=True).index[0]
cols = df['CompanyName'].value_counts().index
df['Calls'] = df.groupby('CompanyName')['CompanyName'].transform(pd.Series.value_counts)
Run Code Online (Sandbox Code Playgroud)
Excetera.它工作,但现在传递"NÍ"和"Nê"作为客户名称给出错误:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xea in position 7: invalid continuation byte
Run Code Online (Sandbox Code Playgroud)
我尝试将行更改为df = pd.read_csv('MYDATA.csv',encoding ='utf-8')但这会产生相同的错误.
所以我从研究发现的建议中尝试了这个,但它也没有用,我得到了同样的错误.
import pandas as pd
import csv
def unicode_csv_reader(utf8_data, dialect=csv.excel, **kwargs):
csv_reader = csv.reader(utf8_data, dialect=dialect, **kwargs)
for row in csv_reader: …Run Code Online (Sandbox Code Playgroud) 我是python的新手,并希望使用bio软件包中的entrez系统从pubmed中提取摘要。我得到了电子搜索,以提供我的UID(存储在中my_list_ges),也可以使用efetch下载条目。但是现在,结果是字典列表,条目看起来像字典,但我无法访问它们:
Entrez.email= "my-email@provider.sth"
handle=Entrez.efetch(db="pubmed",id=my_list_ges[0],rettype="null",retmode="xml")
record = Entrez.read(handle)
abstract=record["Abstract"]
handle.close()
Run Code Online (Sandbox Code Playgroud)
结果是TypeError:
TypeError: list indices must be integers, not str
Run Code Online (Sandbox Code Playgroud)
KeyError当尝试'Abstract'从第一条记录中检索时,我得到一个:
>>> record[0]["Abstract"]
KeyError: 'Abstract'
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为在电子搜索的结果中,我可以通过字典轻松访问我的UID
record [0]的结构为:
{u'MedlineCitation': DictElement({
u'OtherID': [],
u'OtherAbstract': [],
u'CitationSubset': ['IM'],
u'KeywordList': [],
u'DateCreated': {u'Month': '03', u'Day': '17', u'Year': '2016'},
u'SpaceFlightMission': [],
u'GeneralNote': [],
u'Article':
DictElement({
u'ArticleDate': [
DictElement({u'Month': '03', u'Day': '16', u'Year': '2016'}, attributes={u'DateType': u'Electronic'})],
u'Pagination': {u'MedlinePgn': 'e0151666'},
u'AuthorList': ListElement([
DictElement({
u'LastName': "O'Neill",
u'Initials': 'KE',
u'Identifier': [],
u'AffiliationInfo': [{
u'Affiliation': 'MRC …Run Code Online (Sandbox Code Playgroud) 我正在修改我们的太平洋时区过滤器以包含时间选项。我不希望在午夜时显示时间部分。到目前为止,我们使用的唯一导入是 dateutil.parser。任何有关最佳解决方案的指示将不胜感激!谢谢。
def to_pacific_date_str(timestamp, format='%Y-%m-%d', time=False):
pacific_timestamp = timestamp
if time:
format='%Y-%m-%d %H:%M' # 2016-10-03 00:00
if timestamp.tzname() is None:
# setting timezone lost when pulled from DB
utc_timestamp = timestamp.replace(tzinfo=pytz.utc)
# always converting to pacific timezone
pacific_timestamp = utc_timestamp.astimezone(pytz.timezone('US/Pacific'))
return pacific_timestamp.strftime(format)
Run Code Online (Sandbox Code Playgroud) 我知道这个问题的答案通常是“转到Python 的文档”。我已经阅读了它,但仍然不是 100% 确定 uctcoffset 方法的作用。
我假设它需要时区 - UTC 并给出差异,但我需要 100% 确定。
给定一个 numpy 数组(或 pandas 数据框),如下所示:
import numpy as np
a = np.array([
[1, 1, 1, 0.5, np.nan, np.nan, np.nan],
[1, 1, 1, np.nan, np.nan, np.nan, np.nan],
[1, 1, 1, 0.5, 0.25, 0.125, 0.075],
[1, 1, 1, 0.25, np.nan, np.nan, np.nan],
[1, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
[1, 1, 0.5, 0.5, np.nan, np.nan, np.nan]
])
Run Code Online (Sandbox Code Playgroud)
我希望最有效地检索每行中的最后一个非 nan 值,因此在这种情况下,我将寻找一个返回如下内容的函数:
np.array([3,
2,
6,
3,
0,
3])
Run Code Online (Sandbox Code Playgroud)
我可以尝试np.argmin(a, axis=1) - 1,但这至少有两个不良属性 - 对于不以nan(dealbreaker) 结尾的行,它会失败,并且它不会“惰性求值”,并且一旦达到给定行中的最后一个非 nan 值就会停止(这并不像“它必须是正确的”条件那么重要)。
我想有一种方法可以用 来做到这一点np.where …
我正在尝试只剥离多个PDF文件的第一页,然后合并为一个文件。(我每天收到150个PDF文件,第一页是我需要的发票,接下来的三到12页只是我不需要的备份),因此输入的是150个大小不同的PDF文件,而我想要的输出是1个PDF文件,仅包含150个文件中每个文件的首页。
我似乎要做的是合并除第一页以外的所有页面(这是我唯一需要的页面)。
import PyPDF2, os
pdfFiles = []
for filename in os.listdir('.'):
if filename.endswith('.pdf'):
pdfFiles.append(filename)
pdfFiles.sort(key=str.lower)
pdfWriter = PyPDF2.PdfFileWriter()
for filename in pdfFiles:
pdfFileObj = open(filename, 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
for pageNum in range(1 , pdfReader.numPages):
pageObj = pdfReader.getPage(pageNum)
pdfWriter.addPage(pageObj)
pdfOutput = open('CombinedFirstPages.pdf', 'wb')
pdfWriter.write(pdfOutput)
pdfOutput.close()
Run Code Online (Sandbox Code Playgroud) 我有一个函数,我想使用 Cython 来处理大量固定长度的字符串。对于标准 cython 函数,我可以像这样声明数组的类型:
cpdef double[:] g(double[:] in_arr):
cdef double[:] out_arr = np.zeros(in_arr.shape, dtype='float64')
cdef i
for i in range(len(in_arr)):
out_arr[i] = in_arr[i]
return out_arr
Run Code Online (Sandbox Code Playgroud)
当 dtype 是简单的东西(如 、 、 等)时,它会按预期进行编译和工作int32。float但是double,我无法弄清楚如何创建固定长度字符串的类型化内存视图 - 例如np.dtype('a5'),相当于 。
如果我使用这个:
cpdef str[:] f(str[:] in_arr):
# arr should be a numpy array of 5-character strings
cdef str[:] out_arr = np.zeros(in_arr.shape, dtype='a5')
cdef i
for i in range(len(in_arr)):
out_arr[i] = in_arr[i]
return out_arr
Run Code Online (Sandbox Code Playgroud)
该函数可以编译,但是:
in_arr = np.array(['12345', '67890', …Run Code Online (Sandbox Code Playgroud) 使用 matplotlib,我想在每行具有不同列数的网格上显示多个子图,其中每个子图的大小大致相同,并且子图的排列方式使它们或多或少居中,如下所示:
创建一个具有 2, 3, 2 模式的网格是一件相当简单的事情gridspec,但问题在于gridspec,不出所料,将它们与网格对齐,因此带有 2 个图的行中的图更宽:
这是生成它的代码:
from matplotlib import gridspec
from matplotlib import pyplot as plt
fig = plt.figure()
arrangement = (2, 3, 2)
nrows = len(arrangement)
gs = gridspec.GridSpec(nrows, 1)
ax_specs = []
for r, ncols in enumerate(arrangement):
gs_row = gridspec.GridSpecFromSubplotSpec(1, ncols, subplot_spec=gs[r])
for col in range(ncols):
ax = plt.Subplot(fig, gs_row[col])
fig.add_subplot(ax)
for i, ax in enumerate(fig.axes):
ax.text(0.5, 0.5, "Axis: {}".format(i), fontweight='bold',
va="center", ha="center")
ax.tick_params(axis='both', bottom='off', top='off', left='off',
right='off', labelbottom='off', labelleft='off') …Run Code Online (Sandbox Code Playgroud)