PFD*_*PFD 4 variables wolfram-mathematica properties
我正在使用Mathematica并且有一组变量(A,B,C,D,...),其属性A =(蓝色,大,圆形),B =(红色,小,尖尖),等等.这些属性在变量之间可能很常见.查找共享共同属性(例如,小)的所有变量的最佳通用方法是什么?谢谢.
以下是可能的属性列表:
In[1]:= properties={"red","green","blue","big","small","rounded","spiky"};
Run Code Online (Sandbox Code Playgroud)
这是一个包含其中一些属性的对象列表
In[2]:= list={{"blue","big","rounded"},{"red","small","spiky"},
{"red","big","rounded"},{"blue","small","spiky"}};
Run Code Online (Sandbox Code Playgroud)
您可以找到所有具有"蓝色"属性的对象 Select
In[3]:= Select[list, MemberQ[#,"blue"]&]
Out[3]= {{blue,big,rounded},{blue,small,spiky}}
Run Code Online (Sandbox Code Playgroud)
这可以包含在一个函数中.虽然我将如何编写该函数将取决于您计划的数据结构和用法.
实际上,我只是重读了一个问题,你有一个带有一些属性的对象列表,你想要按名称引用这些对象.所以你可能想要更像的东西
In[1]:= listProperties["A"]:={"blue","big","rounded"}
listProperties["B"]:={"red","small","spiky"}
listProperties["C"]:={"red","big","rounded"}
listProperties["D"]:={"blue","small","spiky"}
Run Code Online (Sandbox Code Playgroud)
上面我定义了一些与某些字符串相关的属性.您不必在上面或下面使用字符串,并且您可以创建比您想要的更好的结构.你也可以创建一个构造函数来创建上面的,这样的构造函数也可以检查提供的属性列表是否是正确的形式 - 即没有相互矛盾的属性,都在已知属性的列表等...
然后我们定义一个函数来测试对象/字符串是否具有与之关联的特定属性
In[2]:= hasProperty[obj_, property_]:=MemberQ[listProperties[obj],property]
Run Code Online (Sandbox Code Playgroud)
如果listProperties[obj]没有与之关联的定义/规则,您可能希望返回错误或警告消息.
使用Select发现在有关联属性"蓝色"列表中的所有"对象":
In[3]:= Select[{"A","B","C","D"}, hasProperty[#,"blue"]&]
Out[3]= {A,D}
Run Code Online (Sandbox Code Playgroud)
还有其他方法(可能更好的方法)来设置这样的数据结构.但这是Mathematica中最简单的方法之一.