2017-10-13 96 views
-2

在我的代码中,我将两个数组相乘的地方,结果如下,我无法对其执行任何更多操作。我应该如何删除array这样的关键字?我是python的新手,这是我的代码中唯一的一部分,我看到这个关键的工作。顺便说一句,代码是在Coursera py编辑器中创建一个深度神经网络,我无法从这部分代码中继续。如何删除python数组中的数组关键字?

(我会提供更多的代码和澄清今晚。)

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]])) 
+0

你可以使用生成此输出的代码进行更新吗? – PseudoAj

+0

问题可能不是你所看到的“数组”关键字,而是你拥有数组元组的事实。 – Julien

+0

即时通讯新的py。这里是更新 – DragonKnight

回答

0

我做了一个拷贝正膏,并得到了漂亮的显示:

((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),但这不是这种情况。

+0

问题已更新。 – DragonKnight

+0

这不提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 - [来自评论](/ review/low-quality-posts/17614034) – Isma

+3

@lsma,我知道我在这里做什么。 OP对他看到的内容感到困惑,认为'array'是一个无关的关键字,而不是关于结构的重要线索。我展示的内容太长,无法发表评论。此外,评论不保存格式。让我们专注于帮助,而不是挑剔的评论和答案之间的差异。 – hpaulj

0

将结果转换为列表。例如,

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关键字的存在,您不太可能面临错误。这只是一种表示。检查你的元组大小和尺寸,因为这是故障通常的地方。

+0

值是正确的,它似乎当我矢量化参数来计算sigmoid函数,它不接受这种形式的输入。到目前为止,我还没有问题,但这一部分正在犯错误。 – DragonKnight

+0

看到它的形状。如果它的形式(n,1)重塑为(n,),反之亦然,然后将其作为输入馈送。 –

+0

实际上我不得不将形状保持为n,1。失去第二个维度会在整个应用程序中造成bug。 – DragonKnight