小编tel*_*tel的帖子

如何在不制作任何中间副本的情况下将多维h5py数据集复制到平面1D Python列表?

这个问题

如何将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 …

python numpy hdf5 protocol-buffers h5py

5
推荐指数
1
解决办法
824
查看次数

如何获取 tput smcup/rmcup 设置的屏幕状态?

虽然我知道tput rmcup从“备用屏幕”(在 中称为“杯子模式” man 5 terminfo)返回并恢复保存的屏幕,但它确实具有重新定位光标的副作用。

因此,如果tput smcup被调用,tput rmcup则恢复屏幕并重新定位光标,但如果您随后再键入一些命令或按 Enter 几次然后再次使用tput rmcup,光标将返回到原始保存的位置。

一个用例是在bash重播终端录音的脚本中[使用scriptreplay]:如果脚本提前结束而没有[相当于]调用tput rmcup,那么我希望能够在我的bash脚本中检测到这一点并tput rmcup自动调用。

简而言之,我希望能够确定当前的屏幕状态是什么;即,它是“备用屏幕”还是“正常屏幕”?

bash terminal xterm tput

5
推荐指数
1
解决办法
3858
查看次数

如何在 Python 中实现基于 Householder 的 QR 分解?

我目前正在尝试为矩形矩阵实现基于 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

4
推荐指数
1
解决办法
5743
查看次数

在 Matplotlib 中在刻度标签周围绘制框

我有一个带有多个子图的 Matplotlib 图:

unboxed_ticklabel_multifig

我想在其中一个刻度标签周围画一个红色的小框,如下所示:

boxed_ticklabel_multifig

我怎样才能在 Matplotlib 中做到这一点(可靠且可重复)?

python plot matplotlib

3
推荐指数
1
解决办法
1936
查看次数

如何使用 Python 正确计算四分位距 (IQR)?

我试图了解计算 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 numpy scipy

3
推荐指数
1
解决办法
8788
查看次数

numpy 的 sin(x) 有多精确?我怎么知道?[需要它来数值求解 x=a*sin(x)]

我正在尝试在 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)精度的问题吗?我提供有关目的的信息纯粹是为了上下文。

python precision trigonometry numpy numerical-methods

3
推荐指数
1
解决办法
2073
查看次数

按分位数对 Pandas 数据框进行排名

我有一个 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)

python percentile pandas

3
推荐指数
1
解决办法
1502
查看次数

更新旧版C makefile以包含C++源文件

我在计算生物物理实验室工作.我不是程序员,虽然我得到报酬就像一个人.这是我的问题:该实验室的主要产品是一个巨大的(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)

c c++ legacy makefile gnu-make

2
推荐指数
1
解决办法
1811
查看次数

终端程序如何向屏幕添加滚动?

程序 less、more 或 vi 是如何在终端屏幕上添加滚动部分而不清除屏幕的,之后它是如何消失的?

如果我从脚本或脚本退出的方式运行它,有没有办法在特定的时间内运行更少?

bash shell terminal less-unix

2
推荐指数
1
解决办法
643
查看次数

如何将二维数组从较粗的分辨率插值到较细的分辨率

假设我有一个形状为 的发射数据(21600,43200),它对应于latlon,即

lat = np.arange(21600)*(-0.008333333)+90
lon = np.arange(43200)*0.00833333-180
Run Code Online (Sandbox Code Playgroud)

我还有一个形状为 的缩放因子(720,1440,7),对应于latlonday 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)。之后,我可以将插值因子与排放数据相乘以获得新的排放输出。

但我对插值方法有困难。有人能给我一些建议吗?

numpy scipy netcdf python-xarray

2
推荐指数
1
解决办法
2094
查看次数