问题标签 [array-broadcasting]
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.
arrays - ValueError:无法将输入数组从形状(1120,1472,4)广播到形状(3000,3000)
我有一个形状为 (1120,1472,4) 的图像,我正在尝试将其更改为 (3000, 3000, 4) 我编写的代码是这样的。
它生成
python - 使用 Theano 沿特定维度添加张量
我试图了解如何使用dimshuffle
将噪声广播到 4 维张量。例如,4 维张量具有(num_examples, 3, 32, 32)
其中 3 对应于 32*32 图像的 r、g、b 分量的形状。我想添加高斯噪声,但是我想向所有三个分量(即 r、g、b)添加相同的噪声,并且对于每个示例,噪声将是一个随机的 32*32 矩阵。
所以我必须分别添加维度(num_examples, 3, 32, 32)
和的两个张量(num_examples, 32, 32)
。我还没有弄清楚如何dimshuffle
在第二个张量上使用,以便它的最后两个维度变得可广播。
python - 强制乘法使用 __rmul__() 而不是 Numpy 数组 __mul__() 或绕过广播
这个问题与 Overriding other __rmul__ with your class's __mul__中的问题很接近,但我的印象是,这是一个更普遍的问题,而不是数字数据。也没有回答,我真的不想使用矩阵乘法@
进行此操作。因此,问题。
我确实有一个接受标量和数值数组乘法的对象。像往常一样,左乘法工作正常,因为它使用了myobj()
方法,但在右乘法中,NumPy 使用广播规则并给出元素级结果dtype=object
。
这也具有无法检查数组大小是否兼容的副作用。
因此,问题是
有没有办法强制 numpy 数组查找
__rmul__()
另一个对象的,而不是广播和执行元素__mul__()
?
在我的特定情况下,对象是 MIMO(多输入、多输出)传递函数矩阵(或滤波器系数矩阵,如果您愿意),因此矩阵乘法在线性系统的加法和乘法方面具有特殊含义。因此,在每个条目中都有 SISO 系统。
使用这些定义,以下命令会显示不希望的行为。
python - Python numpy 数组乘法
如果我必须数组 X(X 有 n 行和 k 列)和 Y(Y 有 n 行和 q 列)我如何以向量形式将两者相乘,从而获得具有以下特征的数组 Z:
numpy - 包含 nan 的数组行的平均值直到 25%
我有一个二维数组 x,每一行都有不同数量的 nan 值:
给定这个数组,对于每一行,我想计算前 25 个百分位数内所有值的平均值。我正在执行以下操作:
但这给出了错误的结果——特别是计数(np.nansum/np.nanmean)无论我选择什么百分位数都保持不变,因为比较在不正确的地方产生零,并被视为平均值的有效值。我不能简单地使用x[x>limit[:,None]]
,因为它给出了一个 1D 数组,我需要一个 2D 结果。
我通过以下方式解决了它:
有更好的方法吗?
python - 如何在矢量化滑动窗口的切片上调用函数?
我正在尝试矢量化滑动窗口搜索以进行对象检测。到目前为止,我已经能够使用 numpy 广播将我的主图像切成窗口大小的切片,这些切片存储在all_windows
下面看到的变量中。我已经验证了实际值是否匹配,所以我对此感到满意。
下一部分是我遇到麻烦的地方。我想在all_windows
调用函数时对数组进行索引,patchCleanNPredict()
以便可以以类似的矢量化格式将每个窗口传递给函数。
我试图创建一个名为 new_indx 的数组,该数组将包含二维数组中的切片索引,例如 ([0,0], [1,0], [2,0]...),但遇到了问题。
我希望最终得到每个窗口的一系列置信度值。下面的代码适用于 python 3.5。提前感谢您的任何帮助/建议。
python - 从列表中减去数字不引发 TypeError
如果我做
我明白了TypeError: unsupported operand type(s) for -: 'list' and 'int'
但是,我有一个由 组成的列表b
,np.float64
并且以下代码有效:
我认为这是因为中的数字b
是np.float64
,并且b
在某种程度上被转换为np.array
,然后广播发生了。但我仍然发现这种行为令人惊讶:由于列表中的所有元素不需要具有相同的类型,如果b[0]
是字符串怎么办?中的操作数 b - b[-1]
仍然是list
and np.float64
,那么为什么b - b[-1]
不提高 aTypeError
呢?
编辑:有人回答说是不同的list
;np.array
嗯,我知道。但是b
没有np.array
. 它的行为就像一个,但它的类型是list
,就像我在代码片段中所说的那样。
这是一个最小的工作示例b
:
python - 不广播 Numpy 数组
在大型代码库中,我np.broadcast_to
用于广播数组(此处仅使用简单示例):
在代码的其他地方,我使用了第三方函数,这些函数可以在 Numpy 数组上以矢量化方式运行,但不是 ufunc。这些函数不理解广播,这意味着在数组上调用这样的函数y
是低效的。Numpy 之类的解决方案vectorize
也不好,因为虽然它们理解广播,但它们for
在数组元素上引入了一个循环,这样效率非常低。
理想情况下,我想做的是有一个函数,我们可以调用 eg unbroadcast
,它返回一个具有最小形状的数组,如果需要,可以广播回全尺寸。所以例如:
然后我可以在 上运行第三方功能z
,然后将结果广播回y.shape
.
有没有办法实现unbroadcast
依赖于 Numpy 的公共 API?如果没有,是否有任何黑客可以产生预期的结果?
python - 在 numpy 中广播 (N,) 和 (N,1) 数组
我最近在使用 numpy 进行广播时遇到了以下问题。
虽然我意识到这是根据https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html的规则,但它似乎与人们所期望的相反——结果是(100,1) 向量。
我只是想知道 - 这种行为是否有充分的理由(即这是可取的行为) - 或者它只是定义广播规则的方式的副产品。
python - 如何在 numpy 中优雅地构造以下矩阵?
假设我有一个 5 维矩阵v
,现在我想要一个新的矩阵来D
实现
我如何在 numpy 中优雅地做到这一点?