我定义了一个二维数组如下:
predict_result = np.zeros((69,1000))
在循环中,我试图将一个预测的一维数组注入其中。
for ij in range(0,1000):
# # some code to generate Ypredict
predict_result[:,ij]=Ypredict
Ypredict总是(69,1)的形状。但是,运行该程序会出现以下错误
predict_result:,ij=Ypredict ValueError:无法广播输入数组从形状(69,1)到形状(69)
如何纠正此错误?
我很难理解Numpy的阵列广播规则。
显然,如果你在两个尺寸和形状相同的数组上执行元素乘法,那么一切都很好。此外,如果你把多维数组乘以一个标量,它就能工作。这我能理解。
但是如果你有两个不同形状的N维数组,我不清楚广播规则到底是什么。这个解释说:为了广播,一个操作中两个数组的尾轴的大小必须是相同的,或者其中一个必须是一个。
好的,我假设尾轴是指N数组中的M x N。因此,这意味着如果我试图用相同的列数乘两个二维数组(矩阵),它应该能工作吗?只是它不..。
>>> from numpy import *
>>> A = array([[1,2],[3,4]])
我不明白。这些文档解释了广播的规则,但似乎没有用英语来定义它。我的猜测是,广播是当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,)
但是,错误信息暗示我走在正确的轨道上。有人可以定义广播,然后提供一些简单的例子来说明什么时候起作用,什么时候不起作用?
希望在一维和二维数组之间执行元素级比较。需要将1D数组的每个元素与相应的2D行进行比较(例如更大),并创建掩码。下面是一个示例:
A = np.random.choice(np.arange(0, 10), (4,100)).astype(np.float)
B = np.array([5., 4., 8., 2. ])
我想做
A<B
所以A的第一行将和B比较,B是5,结果是一个布尔数组。
如果我尝试这个,我会得到:
operands could not be broadcast together with shapes (4,100) (4,)
有什么想法吗?
假设我有一个2D Numpy数组:
>>> a = np.random.random((4,6))
我想在每一行中添加一个一维数组:
>>> c = np.random.random((6,))
>>> a + c
这是可行的。现在,如果我尝试向每一列添加一个一维数组,我会得到一个错误:
>>> b = np.random.random((4,))
>>> a + b
Traceback (most recent call last):
File "<stdin>", li
在关于的文档中,说明了两个维度是兼容的,如果:
他们是平等的或者
其中一个是1
下面的一些例子说明了这一点,例如:
A (4d array): 8 x 1 x 6 x 1
B (3d array): 7 x 1 x 5
Result (4d array): 8 x 7 x 6 x 5
这似乎很明显。但是,当一维数组的形状与2d数组的第二轴的形状兼容时,我一直无法找到一个具体的示例/解释,说明为什么一维数组只能与2d数组广播。例如:
np.ones((2,3)) * np.arange(3)
array([[0., 1., 2.],
我举了一个很简单的例子-
a = np.array([1,2,3,4,5])
mask= np.array([True, False])
a[mask]
这会产生IndexError: boolean index did not match indexed array along dimension 0; dimension is 5 but corresponding boolean dimension is 2。
混淆是因为我对这一部分的理解(或缺乏):-
如果obj.ndim == x.ndim, x[obj]返回一个一维数组,其中填充了与obj的True值相对应的x元素。搜索顺序将是
以下是问题所在:
给定包含n个元素的numpy数组'a‘,用b表示其唯一值集
按升序表示数组b的大小。您需要创建一个n×m维的numpy数组,其中每一行的值必须为1,如果它等于数组b的给定索引的值,则在其他地方必须为0。
import numpy as np
def convert(a):
b = np.unique(sorted(a))
result = []
for i in a:
result.append((b == i) * 1)
return np.array(result)
a = np.array([1, 1, 2
我正在寻找一种方法,将由x元素组成的一维numpy数组分配给形状(y,z)的二维numpy数组。
示例:
A=np.array([[0],[0],[0]])
A[2]=np.array([0,2])
这应该会导致
A=[[0],[0],[0,2]]
使用python列表可以很好地工作,但是在numpy中尝试这样做会给我带来很大的麻烦,通常会导致错误消息:
could not broadcast input array from shape (z) into shape (x)
这似乎是由于numpy复制了所有的东西而不是修改数组的结果。我只是最近才开始使用numpy,如果有人能帮我找到一种有效