在我的代码中,我将两个数组相乘,结果是关键字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]]))
答案 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个数组。第二个是阵列。
告诉我们Y
和AL
;特别是他们是什么?元组?数组元组?对象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关键字,您不太可能遇到错误。这只是一种表现形式。检查您的元组大小和尺寸,因为这是故障通常所在的位置。