我正在研究不同形状的数组,我想将它们全部保存起来numpy.save,所以,请考虑一下
mat1 = numpy.arange(8).reshape(4, 2)
mat2 = numpy.arange(9).reshape(2, 3)
numpy.save('mat.npy', numpy.array([mat1, mat2]))
Run Code Online (Sandbox Code Playgroud)
有用.但是当我有两个尺寸相同的矩阵时,它就不起作用了.
mat1 = numpy.arange(8).reshape(2, 4)
mat2 = numpy.arange(10).reshape(2, 5)
numpy.save('mat.npy', numpy.array([mat1, mat2]))
Run Code Online (Sandbox Code Playgroud)
它导致
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: could not broadcast input array from shape (2,4) into shape (2)
并注意问题引起的numpy.array([mat1, mat2])而不是由numpy.save
我知道这样的阵列是可能的:
>> numpy.array([[[1, 2]], [[1, 2], [3, 4]]])
array([[[1, 2]], [[1, 2], [3, 4]]], dtype=object)
因此,所有我想要的是两个数组保存为mat1和mat2一次.
我有两个列表list1和list2数字,我想用相同的指令迭代它们.像这样:
for item in list1:
print(item.amount)
print(item.total_amount)
for item in list2:
print(item.amount)
print(item.total_amount)
Run Code Online (Sandbox Code Playgroud)
但这感觉多余.我知道我可以写for item in list1 + list2:,但它有运行时间的代价.
没有宽松的时间,有没有办法做到这一点?
我是python中多线程的初学者。
我想在线程中使用锁定。是否必须在线程中将其声明为全局?我的代码如下所示:
i = 0
lock = threading.RLock()
def do_work():
global i
# global lock ?????????????
while i < len(my_list):
lock.acquire()
my_i = i
i += 1
lock.release()
my_list[my_i].some_works()
workers = [threading.Thread(target=do_work) for _ in range(8)]
for worker in workers:
worker.start()
Run Code Online (Sandbox Code Playgroud) 我有矢量a。
我想计算np.inner(a, a)
但是我不知道是否有更漂亮的方法来计算它。
[这种方式的缺点是,如果我想针对a-b一个或更复杂的表达式进行计算,则必须多做一行。c = a - b而np.inner(c, c)不是somewhat(a - b)]