如何删除python数组中的数组关键字?

时间:2017-10-13 06:17:10

标签: python arrays numpy

在我的代码中,我将两个数组相乘,结果是关键字array,我无法对其执行任何操作。当我已经可以看到结果是一个数组时,为什么生成这个关键字!?

L,Y,AL = 2 ,[[1 0]] ,[[ 1.78862847  0.43650985]]
arr = - (np.divide(Y, AL) - np.divide(1 - Y, 1 - AL))
>>>((array([[ 0.09649747, -1.8634927 ],
           [-0.2773882 , -0.35475898],
           [-0.08274148, -0.62700068],
           [-0.04381817, -0.47721803]]), 
     array([[-1.31386475,  0.88462238,  0.88131804,  1.70957306],
           [ 0.05003364, -0.40467741, -0.54535995, -1.54647732],
           [ 0.98236743, -1.10106763, -1.18504653, -0.2056499 ]]), 
     array([[ 1.48614836],
           [ 0.23671627],
           [-1.02378514]])), 
     array([[-0.7129932 ,  0.62524497],
           [-0.16051336, -0.76883635],
           [-0.23003072,  0.74505627]]))

2 个答案:

答案 0 :(得分:1)

我做了一个复制粘贴,并得到了一个更漂亮的显示器:

((array([[ 0.09649747, -1.8634927 ],
         [-0.2773882 , -0.35475898],
         [-0.08274148, -0.62700068],
         [-0.04381817, -0.47721803]]),
  array([[-1.31386475,  0.88462238,  0.88131804,  1.70957306],
         [ 0.05003364, -0.40467741, -0.54535995, -1.54647732],
         [ 0.98236743, -1.10106763, -1.18504653, -0.2056499 ]]),
  array([[ 1.48614836],
         [ 0.23671627],
         [-1.02378514]])),
 array([[-0.7129932 ,  0.62524497],
        [-0.16051336, -0.76883635],
        [-0.23003072,  0.74505627]]))

你有4个数组的元组。它们的形状不同,(4,2),(3,4),(3,1)和a(3,2)。

仔细看()。它是一个2元素元组。一个元素也是一个元组,有3个数组。第二个是阵列。

告诉我们YAL;特别是他们是什么?元组?数组元组?对象dtype数组?很难想象np.divide可能产生的对象会产生这个元组。

添加您的值(我必须添加,

In [63]: L,Y,AL = 2, [[1, 0]], [[ 1.78862847,  0.43650985]]
In [64]: - (np.divide(Y, AL) - np.divide(1 - Y, 1 - AL))
...
TypeError: unsupported operand type(s) for -: 'int' and 'list'

从列表中创建数组:

In [65]: Y=np.array(Y); AL = np.array(AL)
In [66]: - (np.divide(Y, AL) - np.divide(1 - Y, 1 - AL))
Out[66]: array([[-0.5590876 ,  1.77465391]])

结果是(1,2)数组,看起来与arr完全不同。

有时海报会获得包含数组的数组。从头开始构建可能很棘手:

In [105]: np.array(arr)
...
ValueError: could not broadcast input array from shape (3,2) into shape (3)

当我尝试将numpy函数应用于此嵌套元组时,会出现这种错误。

创建对象数组的更可靠方法是:

In [106]: A = np.empty(2, object)
In [107]: A[:] = arr
In [108]: A
Out[108]: 
array([ (array([[ 0.09649747, -1.8634927 ],
       [-0.2773882 , -0.35475898],
       [-0.08274148, -0.62700068],
       [-0.04381817, -0.47721803]]), array([[-1.31386475,  0.88462238,  0.88131804,  1.70957306],
       [ 0.05003364, -0.40467741, -0.54535995, -1.54647732],
       [ 0.98236743, -1.10106763, -1.18504653, -0.2056499 ]]), array([[ 1.48614836],
       [ 0.23671627],
       [-1.02378514]])),
       array([[-0.7129932 ,  0.62524497],
       [-0.16051336, -0.76883635],
       [-0.23003072,  0.74505627]])], dtype=object)

并将内部元组转换为数组:

In [109]: A[0] = np.array(A[0])
In [110]: A
Out[110]: 
array([ array([ array([[ 0.09649747, -1.8634927 ],
       [-0.2773882 , -0.35475898],
       [-0.08274148, -0.62700068],
       [-0.04381817, -0.47721803]]),
       array([[-1.31386475,  0.88462238,  0.88131804,  1.70957306],
       [ 0.05003364, -0.40467741, -0.54535995, -1.54647732],
       [ 0.98236743, -1.10106763, -1.18504653, -0.2056499 ]]),
       array([[ 1.48614836],
       [ 0.23671627],
       [-1.02378514]])], dtype=object),
       array([[-0.7129932 ,  0.62524497],
       [-0.16051336, -0.76883635],
       [-0.23003072,  0.74505627]])], dtype=object)

print(str而不是repr表示)可能不同:

In [111]: print(A)
[ array([ array([[ 0.09649747, -1.8634927 ],
       [-0.2773882 , -0.35475898],
       [-0.08274148, -0.62700068],
       [-0.04381817, -0.47721803]]),
       array([[-1.31386475,  0.88462238,  0.88131804,  1.70957306],
       [ 0.05003364, -0.40467741, -0.54535995, -1.54647732],
       [ 0.98236743, -1.10106763, -1.18504653, -0.2056499 ]]),
       array([[ 1.48614836],
       [ 0.23671627],
       [-1.02378514]])], dtype=object)
 array([[-0.7129932 ,  0.62524497],
       [-0.16051336, -0.76883635],
       [-0.23003072,  0.74505627]])]

您的示例具有()标记的事实强烈暗示了它的元组,而不是列表或对象数组。

有时列表或阵列元组可以变成更平坦的'有一些concatenate版本的数组(hstack,vstack,stack),但这不是这种情况。

答案 1 :(得分:1)

将结果投射到列表中。例如,

a = [1, 2, 3]
b = [4, 5, 6]
np.add(a,b)

返回数组([5,7,9])。但是,

a = [1, 2, 3]
b = [4, 5, 6]
list(np.add(a,b))

返回,

[5,7,9]。

但是,由于存在array关键字,您不太可能遇到错误。这只是一种表现形式。检查您的元组大小和尺寸,因为这是故障通常所在的位置。