问题标签 [numpy-ndarray]
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.
python - 如何根据条件从 numpy 数组中删除一行?
从以下数组:
如何删除包含 'a' 的行?预期结果 :
python - 在 NumPy Python 中广播行到列时,通过引用增加数组的最有效方法是什么?可以矢量化吗?
我在 Python 中有这段代码
在哪里
我想矢量化或以其他方式使其更高效,即更快,并且如果可能的话在内存消耗上更经济。这里,我的 ax 和 ay 指的是数组 A 的绝对元素,而 rx 和 ay 是相对坐标。所以,我正在更新计数器数组 A。
我的表 A 可以是 1000x1000,而 ax,ay 是 100x1,cx,cy 是 300x1。整个事情都在循环中,最好是优化的代码不会继续创建 A 大小的大表。
这个问题与我之前提出的问题有关,但由于增量的工作方式,它并不直接适用于这种情况。这是一个例子。
这段代码正是我想要的:
但是,下面的代码不起作用,因为当我们递增一个数组时,它会预先计算数组的右侧:
这个解决方案在数字的正确性方面起作用,但它不是最快的,可能是因为 np.add.at() 函数没有缓冲:
numpy - 3D 数组中的 NumPy 索引歧义
我有以下形状的 3D 数组
我正在尝试进行高级索引以提取子数组,例如:
在以下情况下,我希望结果是 shape (4, 2)
。
由于我们确实__getitem__
沿第一个维度调用该维度将消失。沿着第二个轴,我们对所有内容进行切片,使其应该是4
,沿着最后一个轴,它应该是2
。所以,我们应该得到 shape 的结果子数组,(4, 2)
但我们得到的是 shape (2, 4)
。为什么会出现这种歧义?我应该如何解释结果?
python - 相交多个 2D np 阵列以确定区域
使用这个可重现的小示例,到目前为止,我无法从 3 个数组中生成一个新的整数数组,该数组包含所有三个输入数组的唯一分组。
这些数组与地形属性有关:
这个想法是使用 GIS 例程将地理轮廓分为 3 个不同的属性:
- 1-8 表示方面(1 = 朝北,2 = 朝东北等)
- 9-12 坡度(9=平缓坡度...12=最陡坡度)
- 13-16 表示海拔(13=最低海拔...16=最高海拔)
下面的小图试图描述我所追求的结果(数组显示在左下角)。请注意,图中给出的“答案”只是一种可能的答案。我不关心结果数组中整数的最终排列,只要最终数组在每个行/列索引处包含一个标识唯一分组的整数即可。
例如,[0,1] 和 [0,2] 处的数组索引具有相同的坡向、坡度和高程,因此在结果数组中接收相同的整数标识符。
numpy是否有针对这种事情的内置例程?
python - np.unravel_index 的直观解释是什么?
和标题说的差不多。我已经阅读了文档并且我已经使用了一段时间的功能,但我无法辨别这种转换的物理表现是什么。
python - 如何在张量流中索引并分配给张量?
我有一个如下的张量和一个 numpy 二维数组
我想将该行中的元素在这些索引处分配为零。但是我不能索引张量并分配给它。我曾尝试使用tf.gather函数,但我该如何做作业?我想将它保留为张量,然后在可能的情况下在最后的会话中运行它。
python-2.7 - 从 ndarray Python 2.7 中删除列和行
我已经实现了从 Python 2.7 中的 ndarray 中删除一些列和行的算法,但是我觉得应该有更好的方法来做到这一点。可能我不知道如何在 Python 中做得很好,这就是我把问题放在这里的原因。我一直在搜索,但我没有成功找到类似的问题和文档(例如在scipy 切片和索引文档中)
假设我有一个包含一些行和列的 ndarray:
哪个输出是:
假设我想删除前一个 ndarray 的一些列和/或行。特别是我想删除第 0 列和第 1 行,这是一个输出,如:
为此,我遵循以下步骤,但是它们看起来也不是很优雅,我觉得它们应该是一个更好的实现。
我选择要删除的列和行,在此示例中:
/li>现在我创建了几个列表,其中包含要保留的列和行。
Matlab 中的这一步将更简单,只需使用 ~ 来分割矩阵的索引(在 python ndarray 中)。有一个更好的方法吗?.
然后我选择要保留的那些列和行:
/li>
输出:
请注意,如果您只写:
输出是:
这对我来说有点令人毛骨悚然,这a[rows_to_keep,columns_to_keep]
与a[rows_to_keep,:][:,columns_to_keep]
.
有没有更好的方法来涵盖这些步骤?
非常感谢你
python-2.7 - 以最 Python 的方式写入 ndarray 的子 ndarray。蟒蛇2
我有一个像这样的ndarray:
但我想要这样的东西:
为此,我想避免一一进行,我更喜欢在数组或矩阵中进行,因为稍后我想扩展代码。不,我已经更改了初始矩阵的子矩阵(在数学术语中,就本示例 ndarray 而言)。在示例中,考虑的列是 [1,2] 和行 [0,1]。
我的第一次尝试是:
但是这不会修改初始的 a,我没有任何错误,所以 a=
所以我实现了一段代码来完成这项工作:
艾尔认为前面的几行可以完成这项工作,我想知道如何以更快的方式进行切片。也可以通过以下方式:
所需的输出是
非常感谢!
python - NumPy ufunc 在一个轴上比另一个轴快 2 倍
我正在做一些计算,并测量ufunc在不同轴上的性能np.cumsum
,以使代码更具性能。
cumsum
轴 1 上的速度几乎是轴 0 上的2 倍。cumsum
为什么会这样,幕后发生了什么?很高兴能清楚地了解其背后的原因。谢谢!
更新:经过一番研究,我意识到如果有人正在构建一个应用程序,他们总是只对某个轴求和,那么数组应该以适当的顺序初始化:即轴 = 1 总和的C 顺序或Fortran 顺序对于axis = 0 sums,以节省CPU时间。
另外:这个关于连续数组和非连续数组之间差异的优秀答案有很大帮助!
python - 使用 einsum 进一步优化 numpy 用于堆叠矩阵向量乘法
我有一个使用线性矩阵变换的“粒子传播”相对简单的例子。
我的粒子分布基本上是一组(“束”)5维向量。它通常包含 100k 到 1M 个这样的向量。
这些向量中的每一个都必须乘以一个矩阵。
到目前为止我想出的解决方案如下。
粒子是这样创建的,协方差矩阵在这里显示为对角线,但这是为了一个相对简单的示例:
传播矩阵很简单
我的解决方案einsum
是
(请注意,这里我滑动以仅获取向量的前四个坐标,但原因无关)。
有没有办法显着加快速度?
我对所有细节没有清晰的看法,但这里有一些想法:
einsum
默认情况下不调用 BLAS 但使用内部 SSE 优化,有没有办法用纯 BLAS 调用来表达我的问题,这会使其更快?- 显然最近版本
einsum
的optimize
选项可以打开以在更广泛的情况下回退到 BLAS 调用。我试过了,它不会改变执行时间。 - PyPy 和 numpy 会更好吗?
我测试了@Divakar 的建议,它确实更快(10M 粒子):
与我最初的相比
一个可能影响最终答案的直接相关问题:
我该如何处理“丢失”的粒子?
在逐个粒子矩阵相乘之后,我将检查一些坐标的上限,例如 (r
是上一步的结果:
然后应用 的下一轮矩阵乘法r[ind]
。
有几件事我不清楚:
- 这是最有效的吗?
- 它不会创建太多副本吗?
- 在跟踪它们丢失的事实(通过掩码)的同时“保留”未选择的粒子(并无论如何将它们相乘)不是更好吗?那是更多的乘法,但是可以将所有内容都保存在一个对象中,而无需进一步分配并保持所有内容对齐?