当使用scipy.ndimage.interpolation.shift使用周期性边界处理(mode = 'wrap'
)沿一个轴移动numpy数据数组时,我得到一个意外的行为.例程尝试强制第一个pixel(index 0
)与最后一个(index N-1
)相同而不是"last plus one(index N
)".
最小的例子:
# module import
import numpy as np
from scipy.ndimage.interpolation import shift
import matplotlib.pyplot as plt
# print scipy.__version__
# 0.18.1
a = range(10)
plt.figure(figsize=(16,12))
for i, shift_pix in enumerate(range(10)):
# shift the data via spline interpolation
b = shift(a, shift=shift_pix, mode='wrap')
# plotting the data
plt.subplot(5,2,i+1)
plt.plot(a, marker='o', label='data')
plt.plot(np.roll(a, shift_pix), marker='o', label='data, roll')
plt.plot(b, marker='o',label='shifted data')
if i == 0: …
Run Code Online (Sandbox Code Playgroud) Mendeley 中是否有以前的视图功能用于查看 pdf(类似于 Adobe Reader 中使用 alt + 左箭头的那个)以在链接的源和目标之间跳转(例如到 pdf 中的参考书目)?
这会很有帮助,因为结合突出显示这将使它成为一个非常好的 pdf 阅读器。Adobe 还提供高亮显示,但从直接修改文件的意义上说,对文件的更改是永久性的。在 Mendeley 中,突出显示的文本仅在 Mendeley 中是永久的,例如,如果您想共享 pdf,这将是有利的。
我将一个整数添加到包含 1000 个元素的整数数组中。当我第一次将单个整数转换为numpy.int64
python-native时,速度提高了 25% int
。
为什么?作为一般经验法则,我是否应该将单个数字转换为本机 python 格式,以便对大约此大小的数组进行单个数字到数组的操作?
\n注意:可能与我之前的问题Conjugating a complex number much fast if number has python-native complex type 有关。
\nimport numpy as np\n\nnnu = 10418\nnnu_use = 5210\na = np.random.randint(nnu,size=1000)\nb = np.random.randint(nnu_use,size=1)[0]\n\n%timeit a + b # --> 3.9 \xc2\xb5s \xc2\xb1 19.9 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 100000 loops each)\n%timeit a + int(b) # --> 2.87 \xc2\xb5s \xc2\xb1 8.07 ns per loop (mean \xc2\xb1 std. dev. of …
Run Code Online (Sandbox Code Playgroud) 对于我的工作,我需要对大图像执行离散傅立叶变换 (DFT)。在当前示例中,我需要 1921 x 512 x 512 图像的 3D FT(以及 512 x 512 图像的 2D FFT)。现在,我正在使用 numpy 包和相关的函数np.fft.fftn()。下面的代码片段示例性地显示了在相同大小/略小的 2D/3D 随机数生成网格上的 2D 和 3D FFT 时间,如下所示:
import sys
import numpy as np
import time
tas = time.time()
a = np.random.rand(512, 512)
tab = time.time()
b = np.random.rand(100, 512, 512)
tbfa = time.time()
fa = np.fft.fft2(a)
tfafb = time.time()
fb = np.fft.fftn(b)
tfbe = time.time()
print "initializing 512 x 512 grid:", tab - tas
print "initializing 100 x 512 x …
Run Code Online (Sandbox Code Playgroud) 我想将 python 生成的 pdf 绘图包含到Overleaf Latex 文档中。但图像显得模糊。下面是一个最小的例子。我用 imshow 生成了两张图,一张用interpolation='none'
,一张用interpolation='nearest'
。使用的版本是Python 2.7.15和matplotlib 2.2.3。
使用 pdf-viewer evince 3.20.2,imshow_none.pdf具有完美锐利的像素,而 imshow_nearest.pdf 显示模糊的像素边缘,并且像素大小可能不同。在Firefox 52.5.0下的 Overleaf 内置 pdf 查看器中,一切都相反,而且模糊程度更严重。从 Overleaf 下载编译好的 pdf 时,情况与查看 evince 下的文件时一样。PNG 屏幕截图和背面的乳胶文件如下所示。
我不是插值专家。pdf查看器使用matplotlib插值参数还是他们自己的插值方法?一旦模糊图像是imshow_none.pdf,一旦是imshow_nearest.pdf ,怎么办?插值方法是否以某种方式存储在pdf中?在标签中?如何读出这些信息呢?有什么方法可以创建一个在 evince 和 Overleaf 下都清晰的文件吗?
Python代码:
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
print sys.version
print matplotlib.__version__
np.random.seed(100)
a = np.random.rand(100,50)
plt.imshow(a, cmap='binary', aspect='auto', interpolation='none', origin='lower')
plt.title('imshow, interpolation: none')
plt.savefig('/home/proxauf/test_pdf_plot_interpolation/imshow_none.pdf') …
Run Code Online (Sandbox Code Playgroud) a
在包含元素的复值数组中nsel = ~750000
,我重复(>~10^6
迭代)更新nchange < ~1000
元素。每次迭代之后,在绝对平方实值数组中,我需要找到最大值b
的索引(可以假设很小,当然,实际上很可能)。索引不需要排序。K
K
K <= ~50
K <= ~10
K
a
更新的值及其索引在每次迭代中都会发生变化,并且它们取决于对应于 的最大值及其索引的(先验)未知元素b
。尽管如此,让我们假设它们本质上是随机的,除了一个特定元素(通常是最大值(一个或多个))始终包含在更新值中。重要提示:更新后,新的最大值可能位于未更新的元素中。
下面是一个最小的例子。为简单起见,它仅演示了 10^6(循环)迭代之一。我们可以使用(for ) 或(任意, 一般情况,请参阅/sf/answers/1661400681/K
) 找到最大值的索引。然而,由于( ) 的尺寸很大,遍历整个数组来查找最大值的索引非常慢。与大量迭代相结合,这形成了我正在使用的较大代码(非线性反卷积算法 CLEAN)的瓶颈,该代码嵌入了该步骤。b.argmax()
K = 1
b.argpartition()
K
b
nsel
我已经问过如何最有效地找到最大值(大小写K = 1
)的问题,请参阅Python 最有效的方法在部分更改的数组中查找最大值的索引。可接受的解决方案仅依赖于b
通过将数据分割成块并(重新)计算仅更新某些元素的块的最大值来进行部分访问。> 7x
从而实现了加速。
根据作者@J\xc3\xa9r\xc3\xb4me Richard 的说法(感谢您的帮助!),不幸的是,这个解决方案不能轻易推广到K > 1
. 正如他所建议的,一个可能的替代方案可能是二叉搜索树。现在我的
问题:这样的二叉树在实践中是如何实现的,以及我们如何最有效地(如果可能的话,很容易地)找到最大值的索引?您是否有其他解决方案来以最快的方式重复查找K …
如何检查 numpy 数组是浮点型还是复杂型?对于简单的示例,以下检查都工作正常。
# these are True
a = np.zeros(10)
a.dtype == float
a.dtype == np.float
a.dtype == np.float64
b = np.zeros(10,dtype=complex)
b.dtype == complex
b.dtype == np.complex
b.dtype == np.complex128
Run Code Online (Sandbox Code Playgroud)
但是,我有一个 dtype 数组dtype('>f8')
。之前的比较都没有将其识别为浮点数组。据我所知,字节顺序(> 与 <)是问题所在。是否有任何通用函数可以检查数组是浮点数组还是具有所有变化的复杂数组?
我想使用media9将 mp4 视频(使用 H.264 编解码器)嵌入到带有 Latex 的 pdf 中包将 mp4 视频(带有 H.264 编解码器)嵌入到带有 Latex 的 pdf 中。编译过程中没有错误信息。在激活pdf中的视频之前,有一个静止图像(如预期),但激活后,只有一个黑色窗口,而视频无法正常播放。
下面给出了一个最小的例子来说明。它是Overleaf 模板的缩短版本,用于使用 Latex 将 mp4 文件嵌入到 pdf 文档中。我已将静态图像penguins.jpg附加到这个问题,但我无法(或不知道如何)附加视频penguinschasingbutterfly.mp4中的stackoverflow
。
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{parskip}
\usepackage{graphicx}
\usepackage{media9}
\begin{document}
This is an .mp4 file:
% using a .mp4; downloaded from https://www.youtube.com/watch?v=-9iXD2-hbJM
\includemedia[width=0.6\linewidth,height=0.6\linewidth,activate=pageopen,
passcontext,
transparent,
addresource=penguinschasingbutterfly.mp4,
flashvars={source=penguinschasingbutterfly.mp4}
]{\includegraphics[width=0.6\linewidth]{penguins}}{VPlayer.swf}
\end{document}
Run Code Online (Sandbox Code Playgroud)
激活之前,pdf 看起来像
激活后pdf看起来像
media9 文档中的视频文件和其他 pdf 中嵌入的视频也会发生同样的情况。中找到的其他多媒体文件media9
(例如音频文件和 3D 对象)可以按预期工作。
我的 pdf 阅读器是Adobe Acrobat Reader …