我正在尝试将以下内容转换为2x2 numpy间隔对象数组:
from interval import interval # from the "pyinterval" package
import numpy as np
np.array([
[interval([1.0, 2.0]), interval([1.0, 2.0])],
[interval([1.0, 2.0]), interval([1.0, 2.0])]
])
不幸的是,这个操作将间隔转换为numpy数组,并给我一个2x2x1x2矩阵。有什么方法可以阻止这种情况发生在numpy数组或矩阵中吗?
我能够通过首先填充空数组来获得所需的结果,其中jac是间隔列表的列表:
arr = np.empty(shape=(2,2), dtype=interval)
for i in range(len(arr)):
for j in range(len(arr)):
arr[i][j] = jac[i][j]
话虽如此,我怀疑这是实现这一目标的更优雅方式。还有更多" pythonic"这样做的方法?
答案 0 :(得分:1)
似乎numpy会强制执行任何clear
syms x k real
simp=@(f) simplify(f, 'Steps', 100, 'IgnoreAnalyticConstraints', true);
a=matlabFunction(simp((2/50)*(int(x.*sin((k.*pi.*x)/50),x,0,1)+int((2-x).*sin((k.*pi.*x)/50),x,1,2))));
clearvars -except a
gif=@(v,k,x,t)sum(a(1:k).*sin(((1:k).*pi.*(x-v.*t)/50)),2);
v=1;
gif_110=@(x,t)gif(v,110,x,t);
figure(1)
x=[-20:0.1:20]';
h=plot(x,gif_110(x,0));
grid on;xlabel('space');ylabel('phi(x)');
for t=0:0.1:2
h.YData=gif_110(x,t);
drawnow;
pause(0.1);
end
- 就像进入新维度一样,即使使用START
OUTPUT ‘screen question1 here’
INPUT ‘user answer’
IF answer1 = ‘yes’ THEN
OUTPUT ‘screen question2 here’
INPUT ‘user answer’
ELSE
OUTPUT ‘battery question1 here’
INPUT ‘user answer’
IF answer2 = ‘yes’ THEN
OUTPUT ‘screen question3 here’
ELSE
调用Sequence
也是如此。您可以通过直接使用np.array
创建一个空数组然后手动填充它来解决此问题。
dtype=object
答案 1 :(得分:0)
填充空数组时不需要显式循环,只需使用[:]
进行分配:
class interval(list):
"""I don't have any real interval but this should work."""
def __repr__(self):
return 'interval({})'.format(super().__repr__())
import numpy as np
>>> a = np.empty((2, 2), dtype=object)
>>> a[:] = [[interval([1.0, 2.0]), interval([1.0, 2.0])],
... [interval([1.0, 2.0]), interval([1.0, 2.0])]]
>>> a
array([[interval([1.0, 2.0]), interval([1.0, 2.0])],
[interval([1.0, 2.0]), interval([1.0, 2.0])]], dtype=object)
>>> a.shape
(2, 2)
>>> a[0, 0]
interval([1.0, 2.0])
不幸的是,没有办法明确告诉numpy.array
哪些类不应该解压缩,所以你可能需要先创建空数组。
旁注:numpy数组没有“interval”dtype,如果它是一个无法识别的dtype,它将使用object
。使用dtype=interval
可能会让其他读者感到困惑,因为他们可能期望有效的dtype。
答案 2 :(得分:0)
通过分配和填充方法,通常可以从列表中分配多个项目。我有一个模糊的记忆,有时候它不起作用,但它确实适用于列表:
In [84]: jac = [[[1,2],[1,2]],[[1,2],[1,2]]]
In [85]: arr = np.empty((2,2),dtype=object)
In [86]: arr[...] = jac
In [87]: arr
Out[87]:
array([[[1, 2], [1, 2]],
[[1, 2], [1, 2]]], dtype=object)
In [88]: arr[1,0]
Out[88]: [1, 2]
P.S。它也适用于jac = [[[[1,2]],[[1,2]]],[[[1,2]],[[1,2]]]]
,这会产生(2,2,1,2)
用作np.array(jac)
。