如何将N x N x N x...h5py数据集中的数据复制到一维标准Python列表而不制作数据的中间副本?
我可以想到使用中间副本执行此操作的几种不同方法.例如:
import h5py
import numpy as np
# initialize list, put some initial data in it
myList = ['foo']
# open up an h5py dataset from a file on disk
myFile = h5py.File('/path-to-my-data', 'r')
myData = myFile['bar']
myData.shape # returns, for example, (5,15,7)
# copy dataset over to a numpy array
arr = np.zeros(myData.shape)
myData.read_direct(arr)
# finally, add data from copied dataset to myList
myList.extend(arr.flatten())
Run Code Online (Sandbox Code Playgroud)
这可以在没有中间副本到numpy数组的情况下完成吗?
(除非你很好奇,否则你绝对不必读这个)
我正在尝试通过他们的Python API将数据从HDF5文件复制到Protocol Buffers文件.这些都是用于编写自己的复杂可序列化数据结构的库/框架.就他们的Python …
虽然我知道tput rmcup从“备用屏幕”(在 中称为“杯子模式” man 5 terminfo)返回并恢复保存的屏幕,但它确实具有重新定位光标的副作用。
因此,如果tput smcup被调用,tput rmcup则恢复屏幕并重新定位光标,但如果您随后再键入一些命令或按 Enter 几次然后再次使用tput rmcup,光标将返回到原始保存的位置。
一个用例是在bash重播终端录音的脚本中[使用scriptreplay]:如果脚本提前结束而没有[相当于]调用tput rmcup,那么我希望能够在我的bash脚本中检测到这一点并tput rmcup自动调用。
简而言之,我希望能够确定当前的屏幕状态是什么;即,它是“备用屏幕”还是“正常屏幕”?
我目前正在尝试为矩形矩阵实现基于 Householder 的 QR 分解,如http://eprints.ma.man.ac.uk/1192/1/qrupdating_12nov08.pdf(第 3、4、5 页)中所述。
显然我弄错了一些伪代码,因为(1)我的结果不同于numpy.qr.linalg()(2)R我的例程产生的矩阵不是上三角矩阵。
我的代码(也可在https://pyfiddle.io/fiddle/afcc2e0e-0857-4cb2-adb5-06ff9b80c9d3/?i=true下找到)
import math
import argparse
import numpy as np
from typing import Union
def householder(alpha: float, x: np.ndarray) -> Union[np.ndarray, int]:
"""
Computes Householder vector for alpha and x.
:param alpha:
:param x:
:return:
"""
s = math.pow(np.linalg.norm(x, ord=2), 2)
v = x
if s == 0:
tau = 0
else:
t = math.sqrt(alpha * alpha + s)
v_one = alpha - t if …Run Code Online (Sandbox Code Playgroud) python numpy linear-algebra numerical-methods qr-decomposition
我试图了解计算 iqr(四分位距)的方法。
根据这个,这个和这个,我尝试了 3 种解决方案来做到这一点。
解决方案_1
a = numpy.array([1, 2, 3, 4, 5, 6, 7])
q1_a = numpy.percentile(a, 25)
q3_a = numpy.percentile(a, 75)
q3_a - q1_a
Run Code Online (Sandbox Code Playgroud)
解决方案_2
from scipy.stats import iqr
iqr(a)
Run Code Online (Sandbox Code Playgroud)
解决方案_3
q1_am = np.median(numpy.array([1, 2, 3, 4]))
q3_am = np.median(numpy.array([4, 5, 6, 7]))
q3_am - q1_am
Run Code Online (Sandbox Code Playgroud)
其中 3 个给出相同的结果 3,这是正确的。
当我尝试另一组数字时,事情变得很奇怪。
solution_1 和 2 都输出 0.95,这是不正确的。
x = numpy.array([4.1, 6.2, 6.7, 7.1, 7.4, 7.4, 7.9, 8.1])
q1_x = numpy.percentile(x, 25)
q3_x = …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 python 中数值求解方程x=a*sin(x),其中a是一些常数。我已经尝试先象征性地求解方程,但似乎这种特殊的表达形式并没有在 sympy 中实现。我也尝试使用 sympy.nsolve(),但它只给了我它遇到的第一个解决方案。
我的计划是这样的:
x=0
a=1
rje=[]
while(x<a):
if (x-numpy.sin(x))<=error_sin:
rje.append(x)
x+=increment
print(rje)
Run Code Online (Sandbox Code Playgroud)
我不想浪费时间或冒丢失解决方案的风险,所以我想知道如何找出我的设备上 numpy 的窦性有多精确(这将成为 error_sin)。
编辑:我尝试使 error_sin 和 increment 都等于我设备的机器 epsilon,但它 a) 需要很长时间,并且 b) sin(x) 不如 x 精确,所以我得到了很多非解决方案(或相当重复的解,因为 sin(x) 的增长比 x 慢得多)。因此这个问题。
编辑2:你能帮我回答一下关于numpy.sin(x)精度的问题吗?我提供有关目的的信息纯粹是为了上下文。
我有一个 Pandas 数据框,其中每一列代表一个单独的属性,每一行都保存特定日期的属性值:
import pandas as pd
dfstr = \
''' AC BO C CCM CL CRD CT DA GC GF
2010-01-19 0.844135 -0.194530 -0.231046 0.245615 -0.581238 -0.593562 0.057288 0.655903 0.823997 0.221920
2010-01-20 -0.204845 -0.225876 0.835611 -0.594950 -0.607364 0.042603 0.639168 0.816524 0.210653 0.237833
2010-01-21 0.824852 -0.216449 -0.220136 0.234343 -0.611756 -0.624060 0.028295 0.622516 0.811741 0.201083'''
df = pd.read_csv(pd.compat.StringIO(dfstr), sep='\s+')
Run Code Online (Sandbox Code Playgroud)
使用该rank方法,我可以找到每个属性相对于特定日期的百分位排名:
df.rank(axis=1, pct=True)
Run Code Online (Sandbox Code Playgroud)
输出:
AC BO C CCM CL CRD CT DA GC GF
2010-01-19 1.0 0.4 0.3 0.7 0.2 …Run Code Online (Sandbox Code Playgroud) 我在计算生物物理实验室工作.我不是程序员,虽然我得到报酬就像一个人.这是我的问题:该实验室的主要产品是一个巨大的(50多个源文件)C程序.我需要让我们的实验室程序与另一个实验室的工具包一起工作,这恰好是一系列C++库(.a文件)的形式.我可以使用以下makefile为我们的程序编译主库:
CC = gcc
#CC = icc
CFLAGS = -g -Wall
#CFLAGS = -xT -openmp -I/opt/local/include -I/usr/local/include -I/opt/GDBM/include
#CFLAGS = -O3 -g -Wall -I/opt/GDBM/include -fopenmp
LIB = mcce.a
AR = ar
ARFLAGS = rvs
SRC = all.c ddvv.c geom_3v_onto_3v.c ins_res.c strip.c\
app.c del_conf.c geom_apply.c line_2v.c vdotv.c\
avv.c del_prot.c geom_inverse.c load_all_param.c vector_normalize.c\
avvvv.c del_res.c geom_move.c load_param.c vector_vminusv.c\
cpy_conf.c det3.c geom_reset.c mxm4.c vector_vplusv.c\
cpy_prot.c det4.c geom_roll.c new_prot.c vector_vxv.c\
cpy_res.c dll.c get_files.c param_get.c param_exist.c\
db_close.c dvv.c iatom.c param_sav.c\
db_open.c free_strings.c ins_conf.c plane_3v.c pdbline2atom.c\ …Run Code Online (Sandbox Code Playgroud) 程序 less、more 或 vi 是如何在终端屏幕上添加滚动部分而不清除屏幕的,之后它是如何消失的?
如果我从脚本或脚本退出的方式运行它,有没有办法在特定的时间内运行更少?
假设我有一个形状为 的发射数据(21600,43200),它对应于lat和lon,即
lat = np.arange(21600)*(-0.008333333)+90
lon = np.arange(43200)*0.00833333-180
Run Code Online (Sandbox Code Playgroud)
我还有一个形状为 的缩放因子(720,1440,7),对应于lat、lon、day of week和
lat = np.arange(720)*0.25-90
lon = np.arange(1440)*0.25-180
Run Code Online (Sandbox Code Playgroud)
现在,我想将该因子应用于排放数据,并且我认为我需要将该因子插值到(720,1440)上(21600,43200)。之后,我可以将插值因子与排放数据相乘以获得新的排放输出。
但我对插值方法有困难。有人能给我一些建议吗?