numpy广播是如何工作的?
我的理解是:
两个阵列
one = np.random.rand(3,2)
two = np.random.rand(5,10)
为了通过数组one two减去数组one的每个条目,必须首先将数组one的每个条目转换为2d数组,如下所示
one_expanded = one[...,None,None]
然后,one_expanded可以直接减去two,得到预期的结果。
然而,基于我的理解,我无法理解numpy在下面两个示例中是如何工作的。
示例1
one = np.random.rand(3,2,1)
two = np.random.rand(2,10)
(on
在numpy中,我有两个“数组”,X是(m,n),y是一个向量(n,1)
使用
X*y
我得到了错误
ValueError: operands could not be broadcast together with shapes (97,2) (2,1)
当(97,2)x(2,1)显然是合法的矩阵运算并且应该给我一个(97,1)向量时
编辑:
我已经用X.dot(y)纠正了这个问题,但原来的问题仍然存在。
我不明白。这些文档解释了广播的规则,但似乎没有用英语来定义它。我的猜测是,广播是当NumPy用虚拟数据填充一个较小的维度数组以执行操作时。但这不管用:
>>> x = np.array([1,3,5])
>>> y = np.array([2,4])
>>> x+y
*** ValueError: operands could not be broadcast together with shapes (3,) (2,)
但是,错误信息暗示我走在正确的轨道上。有人可以定义广播,然后提供一些简单的例子来说明什么时候起作用,什么时候不起作用?
假设t是一个维度为(30,5) (或者实际上是(1,30,5))的二维Numpy数组,x也是一个形状为(1000, 5)的Numpy数组。我试图将x中的2-D数据转换为3-D数据,新数组中的每个矩阵都是x中1000行中的30行(连续)。在t和x[:30]的元组上使用np.vstack时,或者
t = np.vstack((t, x[:30]))
我的输出的形状是(60,5),但我希望它是(2, 30, 5)。我该怎么做呢?
更新:我尝试了dkv的建议,实现如下:
t = np.random.rand(1,30,5)
for i, n in zip(x_data, np.arange(len(x
当我尝试使用广播来乘法矩阵时,当矩阵实际上是有效的乘法时,我得到了一个错误。 x = np.random.randn(2)
y = np.random.randn(2, 3, 3)
x * y 如果数组的形状是 x = np.random.randn(1)
y = np.random.randn(1, 3, 3)
x * y 发生了什么?为什么会这样?
我有一个用于无线电信号的巨大数据集(),其组织如下:
dataset是一个包含3个键(X、Y、Z)的.hdf5文件。
X:形状(2555904x1024x2)浮标over 2 Millions sample each has 1024 complex points (2 floats for real and imaginary parts)
Y:形状(2 555 904 X24)整型指向调制类型
Z:形状(2555904x1)整数信号噪声级(信噪比)
我将调制类型和信噪比组织为一个元组((mod,snr),(mod,snr),(mod,snr), ...)列表。
我的问题
考虑三个numpy数组。每个数字数组都是三维的。我们有数组X,数组Y,数组Z。所有这些数组都是相同的形状。将X、Y和Z的三个匹配元素在同一位置组合在一起,给出一个坐标。我有一个函数(不是python函数,数学函数),它必须运行在这些位置向量之一上,并将输出放置到另一个名为s的三维数组中。因此,如果数组定义如下:
X = [[[1,2],[3,4]] Y = [[[1,2],[3,4]] Z = [[[1,2],[3,4]]
[[5,6],[7,8]]] [[5,6],[7,8]]] [[5,6],[7,8]]]
然后要测