问题标签 [numpy-slicing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
62 浏览

python - 性能随着数组元素嵌套的增加而降低

一个简短的说明:这个问题与我之前问过的另一个问题有关,但是由于在一个问答中提出多个问题被认为是不好的 SO 风格,所以我把它分开了。


设置

我有以下两种矩阵计算的实现:

  1. 第一个实现使用 amatrix of shape (n, m)并且计算在 for 循环中重复 for repetition-times:


2. 第二种实现避免了额外的 for 循环,因此包含repetition = 3到矩阵中,然后是shape (repetition, n, m)


问题

关于这两种实现,我发现了它们%timeit在 iPython 中的性能:

  1. 第一个实现更快(在我的测试用例中,n=1000,m=1000:17 秒对 26 秒)。为什么numpy在三维而不是二维上工作时会这么慢?
0 投票
1 回答
392 浏览

matplotlib - 切片图像的通道并将通道存储到numpy数组中(与图像大小相同)。绘制未给出原始图像的 numpy 数组

我分离了彩色图像的 3 个通道。我创建了一个与图像大小相同的新 NumPy 数组,并将图像的 3 个通道存储到 3D NumPy 数组的 3 个切片中。绘制 NumPy 数组后,绘制的图像与原始图像不同。为什么会这样?

img和数组都有new_img相同的元素,但图像不同。

期望与原始图像相同的图像。

0 投票
0 回答
67 浏览

numpy - 如何对 numpy 数组进行切片并获得浅拷贝?

也许这已经解决了,但我还没有找到一个简洁的答案。我正在尝试使用索引数组对 numpy 数组进行切片,并且我希望切片数组是原始数组的浅表副本。

我认为这可以通过使用 ctypes 创建一个指针数组来解决,但我觉得这会很麻烦。我想知道是否有更有效的方法来做到这一点(即更少的代码,基于numpy)

例如:

我得到的金额相同,因为y是 的副本x,而不是视图。我想定义

使得 y 的条目是对 x 的条目的引用,并且

编辑

在这里找到有用的信息: Numpy 中的视图与副本:无法按照评论中的建议获得花哨切片的浅表副本,将编写 C 代码并将其包装以使其与 numpy 数组互操作。

0 投票
2 回答
197 浏览

python - 向后切片

我有一个从 0 到 999 的 numpy 数组,我想制作一个从列表中的最后一个元素 (999) 到中间的元素 (500) 的切片。

test[500:][::-1] 有效,但如果我有一个二维数组并且我只想沿第零轴这样做,它就不起作用,因为它也会反转第二个轴。

0 投票
0 回答
28 浏览

numpy - 加速涉及数组切片和广播的numpy代码

我有以下代码:

N-基本上以上是计算层结构电场的代码的一部分。对于循环内的每次迭代for,我找到第 th 层内的数组元素的索引N,然后在计算电场后,我将整个事物乘以idx“过滤”出满足的正确部分sp.logical_and(Z<d_cum[n], Z>=d_cum[n-1])

它工作得很好,但我想知道是否有一种更有效的方法可以使用 numpy 数组切片或其他方法来执行此操作,因为每次乘法都涉及很大比例的数组元素,这些元素在每次迭代中都不被接受。我尝试了以下类似的方法,仅适用于坐标数组的相关部分ZX

但是然后Z2变成X2一维数组,我不确定其中的索引部分E或如何适当地重塑数组。

那么有什么方法可以加快原始代码的速度呢?

0 投票
3 回答
2390 浏览

python - 如何从该列表中获取最后一列?

我想为我的 numpy 数组中最右边的列找到一个表达式。

它包含一个数字和一个元组。这是其中的一个元素:

我不确定如何最好地格式化它,但我至少可以清楚 \n 分隔元素,因此 my_list[0] 包含两个元素:0.04715440011642294 和 (array([-0.50099999, 0.056 , 1.61699998]), 0.046637045285032784)。

我想要的是包含元组内部所有第二个元素的列。因此,例如,如果第二个元素是

那我想要

如果我尝试str(my_list[:, 1::][0]),我可以单独获得元组:

'[(array([-0.50099999, 0.056 , 1.61699998]), 0.046637045285032784)]'

但是,当我尝试使用与获取列表第二列相同的技术来访问元组的第二列时,它不起作用。

my_list[:, 1::][:, 1::]具有正确的长度,但充满了空元素。我做了很多尝试来获得正确的语法,但我无法终生提取我想要的列。这尤其令人沮丧,因为我可以轻松键入my_list[:-1, 1::][0][0][1]并获取我想要的列的第一个元素。当然,如果我能得到一个元素,我应该能够找到该列的表达式吗?

0 投票
0 回答
53 浏览

python - 布尔切片交换 numpy 数组的维度

对于一些 nd 数组

我想根据一些布尔语句对最后一个维度进行切片。

但是,返回 (4,5) 而我希望 (5,4) 的形状像

那么,这里发生了什么?

(此行为仅在我通过从中选择一个奇异切片来删除第一个维度时发生。)

0 投票
1 回答
119 浏览

python - 在 3-D numpy 数组的小切片上有效地使用 1-D pyfftw

我有一个大小约为 10,000x512x512 的 3D 数据立方体。我想重复解析沿 dim[0] 的向量窗口(例如 6)并有效地生成傅立叶变换。我想我正在将数组复制到 pyfftw 包中,这给了我巨大的开销。我现在正在查看文档,因为我认为我需要设置一个选项,但我可以在语法上使用一些额外的帮助。

这段代码最初是由另一个人用 numpy.fft.rfft 编写的,并用 numba 加速。但是该实现在我的工作站上不起作用,所以我重新编写了所有内容并选择使用 pyfftw。

会发生什么是我得到一个 4D 数组;变量通道块。我将每个通道保存为二进制文件(不包含在上面的代码中,但保存部分工作正常)。

这个过程适用于我们的解调项目,然后将 4D 数据立方体 channelChunks 解析为 eval(numChannel) 3D 数据立方体(电影),并且根据我们的实验设置,我们可以通过颜色分离电影。我希望我可以绕过编写一个通过 pyfftw 在矩阵上调用 fft 的 C++ 函数。

实际上,我在给定的 1 轴和 2 轴索引处沿 dataChunk 的 0 轴获取 windowSize=6 个元素并执行 1D FFT。我需要在整个 3D 数据块中执行此操作以生成解调电影。谢谢。

0 投票
2 回答
1372 浏览

numpy - 在 numpy/pytorch 中使用 bool 数组或索引数组进行索引是否更快?

我可以使用相同形状的布尔数组/张量或包含我所追求的元素的整数索引的数组/张量来索引我的 numpy 数组/pytorch 张量。哪个更快?

0 投票
0 回答
35 浏览

python - 独立到列的 Numpy 索引

假设我有一个像

我有一个这样的索引列表:

哪里idx.shape[1] == arr.shape[1]。我想要返回的是:

也就是说,一个数组,其中一些(i, j), out[i,j] == arr[idx[i,j], j]