零维 Numpy 数组的操作
Operations with Numpy arrays with zero dimensions
Is a numpy array of shape (0,10) a numpy array of shape (10).我正在编写一个非常简单的函数,它将在 2 维和 3 维之间交替,我想知道是否有这样的输出:
def Pick(N = 0, F, R, Choice=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]):
if N==0:
return np.array(np.random.choice(Choice,size=(F,R)))
else:
return np.array(np.random.choice(Choice,size=(N,F,R)))
将与以下输出的行为相同:
def Pick(N = 0, F, R, Choice=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]):
return np.array(np.random.choice(Choice,size=(N,F,R)))
理论上这些应该是相同的,但是当我尝试时。
a =np.full((10,10,10),1)
然后
a+a
我得到 (10,10,10) np.array 个 2。但是如果我尝试
b=np.full((0,10,10,10),1)
然后
b+b
这是我收到的唯一结果
array([], shape=(0, 10, 10, 10), dtype=int64)
关于这是为什么的任何想法?
抽象地说,形状为 (N,M,L) 的数组可以用形状为 (<>,N,<>,M,<>,L,<>) 的数组表示,其中 <>可以替换为具有任意有限长度的 1 序列。考虑每个数据点对应的索引集合——如果一个维度的长度为0,那么该维度对应的数据点可以承载什么索引?这应该可以解释为什么定义一个 numpy 数组会产生 [] 结果——因为你定义了一个空数组。定义
a = np.full((10,10,10),1)
b = np.full((10,10,10,1),1)
a+b
操作适当地广播(并)产生预期的结果。
0 维度与 1、2 或其他正整数具有相同的含义:
In [437]: np.ones((2,3),int)
Out[437]:
array([[1, 1, 1], # 2*3 elements
[1, 1, 1]])
In [438]: np.ones((1,3),int)
Out[438]: array([[1, 1, 1]]) # 1*3 elements
In [439]: np.ones((0,3),int)
Out[439]: array([], shape=(0, 3), dtype=int64) # 0*3 elements
Is a numpy array of shape (0,10) a numpy array of shape (10).我正在编写一个非常简单的函数,它将在 2 维和 3 维之间交替,我想知道是否有这样的输出:
def Pick(N = 0, F, R, Choice=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]):
if N==0:
return np.array(np.random.choice(Choice,size=(F,R)))
else:
return np.array(np.random.choice(Choice,size=(N,F,R)))
将与以下输出的行为相同:
def Pick(N = 0, F, R, Choice=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]):
return np.array(np.random.choice(Choice,size=(N,F,R)))
理论上这些应该是相同的,但是当我尝试时。
a =np.full((10,10,10),1)
然后
a+a
我得到 (10,10,10) np.array 个 2。但是如果我尝试
b=np.full((0,10,10,10),1)
然后
b+b
这是我收到的唯一结果
array([], shape=(0, 10, 10, 10), dtype=int64)
关于这是为什么的任何想法?
抽象地说,形状为 (N,M,L) 的数组可以用形状为 (<>,N,<>,M,<>,L,<>) 的数组表示,其中 <>可以替换为具有任意有限长度的 1 序列。考虑每个数据点对应的索引集合——如果一个维度的长度为0,那么该维度对应的数据点可以承载什么索引?这应该可以解释为什么定义一个 numpy 数组会产生 [] 结果——因为你定义了一个空数组。定义
a = np.full((10,10,10),1)
b = np.full((10,10,10,1),1)
a+b
操作适当地广播(并)产生预期的结果。
0 维度与 1、2 或其他正整数具有相同的含义:
In [437]: np.ones((2,3),int)
Out[437]:
array([[1, 1, 1], # 2*3 elements
[1, 1, 1]])
In [438]: np.ones((1,3),int)
Out[438]: array([[1, 1, 1]]) # 1*3 elements
In [439]: np.ones((0,3),int)
Out[439]: array([], shape=(0, 3), dtype=int64) # 0*3 elements