我有一个n维数组,其中元组作为元素。我想从数组中减去一个元组并返回一个数组。
import numpy as np
x=5
y=5
z=3
# Create an empty array of size 10x8x4
array_slots = np.empty((x, y, z), dtype=object)
array_slots_end = np.empty((x, y, z), dtype=object)
# Iterate over the indices and assign tuples
for i in range(x):
for j in range(y):
for k in range(z):
array_slots[i, j, k] = (i, j, k)
从上面的数组创建另一个数组
filtered_array = np.concatenate((array_slots[0,:,:],array_slots[:,0,:]),axis=0)
# Filtered_away method creates duplicate entries, hence dropping them.
array_slots_end = DataFrame(filtered_array).drop_duplicates().values
最后试着做一个减法:
np.subtract(array_slots[0],array_slots_end[0,0])
TypeError: unsupported operand type(s) for -: 'tuple' and 'int'
但是,当我直接运行数组时,它可以工作。这就是我想要的输出。
np.subtract([[(0, 0, 0), (0, 0, 1), (0, 0, 2)],
[(0, 1, 0), (0, 1, 1), (0, 1, 2)],
[(0, 2, 0), (0, 2, 1), (0, 2, 2)],
[(0, 3, 0), (0, 3, 1), (0, 3, 2)],
[(0, 4, 0), (0, 4, 1), (0, 4, 2)]],(0, 0, 0))
array([[[0, 0, 0],
[0, 0, 1],
[0, 0, 2]],
[[0, 1, 0],
[0, 1, 1],
[0, 1, 2]],
[[0, 2, 0],
[0, 2, 1],
[0, 2, 2]],
[[0, 3, 0],
[0, 3, 1],
[0, 3, 2]],
[[0, 4, 0],
[0, 4, 1],
[0, 4, 2]]])
我做错了什么?
1条答案
按热度按时间5ktev3wc1#
在'direct'的情况下,您提供的是一个列表,而不是一个数组
np.subtract
使两个参数都成为数组,然后执行减法看看你用列表的np.array得到了什么
这是一个3d int dtype数组,不是你的对象dtype与元组。
这很好地说明了为什么,至少对于计算目的来说,数字数组是最好的。
它不能在元组上做数学运算。元组是python对象,就像列表一样,只能做加法,定义为join,乘法,复制。这是基本的Python。
要创建元组数组,您必须使用一个非常迂回的方法,创建None数组,并使用一个新的元组对象分别填充每个元素。操作这些元组同样是乏味的。